zoukankan      html  css  js  c++  java
  • Python 学习笔记(1)元组,列表,字典

    python 元组 操作及方法

    一、元组

    是一个固定长度,不可改变的Python序列对象

    a,从元组的开头“摘取”几个元素

      a,b,*_=(1,2,3,4,5,6,7)

      in: a

      out :1

      in :b

      out: 2

      in: *_

      out :(3,4,5,6,7)

    b,tuple的count方法

      a=(2,3,4,5,5,5,5,6,7)

      in:a.count(5) #获取5出现的次数

      out:4

    二、列表

    a.列表是内容可变,长度可变的 pytyon对象

      In [36]: a_list = [2, 3, 7, None]

       In [37]: tup = ('foo', 'bar', 'baz')
       In [38]: b_list = list(tup)
      #列表内容可修改
      In:b_list[0]="nba"
      In:b_list
      out:("nba","bar","baz")
    b,列表和元组的语义接近,在许多函数中可以交叉使用。

    list函数常用来在数据处理中实体化迭代器或生成器:

      In [42]: gen = range(10)
      In [43]: gen
      Out[43]: range(0, 10)
     
      In [44]: list(gen)
      Out[44]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
     
    c,bisect的使用
    #bisect模块支持二分查找,和向已排序的列表插入值。bisect.bisect可以找到 插入值后仍保证排序的位置,bisect.insort是向这个位置插入值:
    In [67]: import bisect
    
    In [68]: c = [1, 2, 2, 2, 3, 4, 7]
    
    In [69]: bisect.bisect(c, 2)
    Out[69]: 4
    
    In [70]: bisect.bisect(c, 5)
    Out[70]: 6
    
    In [71]: bisect.insort(c, 6)
    
    In [72]: c
    Out[72]: [1, 2, 2, 2, 3, 4, 6, 7]
    #注意:bisect模块不会检查列表是否已排好序,进行检查的话会耗费大量计算。因此,对未排序的列表使用bisect不会产生错误,但结果不一定正确。

     d,切片

    用切边可以选取大多数序列类型的一部分,切片的基本形式是在方括号中使用start:stop

    In [73]: seq = [7, 2, 3, 7, 5, 6, 0, 1]
    In [74]: seq[1:5]
    Out[74]: [2, 3, 7, 5]
    切片的起始元素是包括的,不包含结束元素。因此,结果中包含的元素个数是stop - start

    负数表明从后向前切片:

    In [79]: seq[-4:]
    Out[79]: [5, 6, 0, 1]
    In [80]: seq[-6:-2]
    Out[80]: [6, 3, 5, 6]
     
    三、字典
    字典可能是Python最为重要的数据结构。它更为常见的名字是哈希映射或关联数组。它是键值对的大小可变集合,键和值都是Python对象。创建字典的方法之一是使用尖括号,用冒号分隔键和值:
    In [101]: empty_dict = {}
     
    In [102]: d1 = {'a' : 'some value', 'b' : [1, 2, 3, 4]}
     
    In [103]: d1
    Out[103]: {'a': 'some value', 'b': [1, 2, 3, 4]}
    可以用del关键字或pop方法(返回值的同时删除键)删除值:
    In [112]: del d1[5]
    In [114]: ret = d1.pop('dummy')
     

    keysvalues是字典的键和值的迭代器方法。虽然键值对没有顺序,这两个方法可以用相同的顺序输出键和值:

    In [117]: list(d1.keys())
    Out[117]: ['a', 'b', 7]
    In [118]: list(d1.values())
    Out[118]: ['some value', [1, 2, 3, 4], 'an integer']
     

    update方法可以将一个字典与另一个融合:

    In [119]: d1.update({'b' : 'foo', 'c' : 12})
    In [120]: d1
    Out[120]: {'a': 'some value', 'b': 'foo', 7: 'an integer', 'c': 12}

    update方法是原地改变字典,因此任何传递给update的键的旧的值都会被舍弃。

    用序列创建字典

    常常,你可能想将两个序列配对组合成字典。下面是一种写法:

    mapping = {}
    for key, value in zip(key_list, value_list):
    mapping[key] = value

    因为字典本质上是2元元组的集合,dict可以接受2元元组的列表:

    In [121]: mapping = dict(zip(range(5), reversed(range(5))))
     
    In [122]: mapping
    Out[122]: {0: 4, 1: 3, 2: 2, 3: 1, 4: 0}
     
    后续=》setdefault
  • 相关阅读:
    hdu 4504(背包最优方案数)
    hdu 4508(完全背包)
    hdu 4509(memset标记)
    hdu 2188
    hdu 2141(二分)
    《算术探索》(高斯) 第一篇(第112目) 总结
    数论概论(Joseph H.Silverman) 定理39.1 连分数的递归公式
    数论概论(Joseph H.Silverman) 定理39.2 连分数相邻收敛项之差定理
    《算术探索》(高斯) 第一篇(第112目) 总结
    有理数的小数表示若无限,则必为无限循环的
  • 原文地址:https://www.cnblogs.com/daniel-niu/p/10831309.html
Copyright © 2011-2022 走看看