jgugugiug 发表于 2018-8-8 06:57:18

python--列表与字典

  列表与字典是其他对象类型的集合。
  一、内置对象---list(列表),可以包含数字、字符串或其他列表。其属性主要有
  1.任意对象的有序集合,列表就是收集其他对象的地方,同时是有位置顺序的。
  2.通过偏移读取
  3.可变长度、异构和任意嵌套
  4.属于可变序列的分类
  5. 对象引用数组
  实际应用中的列表
  1.基本列表操作
  >>> len()      #列表长度
  3
  >>> +    #合并
  
  >>> *2            #重复
  
  >>> str()+"34"    #将列表转换为字符串后合并
  '34'
  >>> +list("34")    #将字符串转换列表后合并
  
  >>>
  2.列表迭代和解析(随时盖楼)
  >>> s=[]
  >>> for c in 'spam':
  ...s.append(c*4)                #在列表末尾添加新值
  ...
  >>> s
  ['ssss', 'pppp', 'aaaa', 'mmmm']
  >>>
  3.索引、分片和矩阵
  >>> s=['one','two','three']
  >>> s
  'two'
  >>> s[-1]
  'three'
  >>> s
  ['two', 'three']
  >>> s=[,,]
  >>> s
  
  >>> s
  5
  4.原处修改列表
  >>> s=['one','two','three']
  >>> s="I"                        #使用索引赋值的方法在原处修改
  >>> s
  ['I', 'two', 'three']
  >>> s=["love",'you']      #通过分片方法在原处修改,分片的理解最好分两步,1删除,删除等号左边指定的分片。2插入,将等号右边的对象的片段插入旧分片的位置。
  >>> s
  ['I', 'love', 'you']
  >>>
  >>> s=[]                        #先删除咯
  >>> s
  ['I', 'you']                #注 实际上分片赋值时一次性替换整个片段的,因为被赋值的序列长度不一定要与被赋值的分片的长度相匹配,所以可以用来替换,增长,缩短主列表。
  5.列表方法
  列表对象也支持特定类型方法调用,方法:是属于特性对象的函数(实际上是引用函数的属性),以下方法只使用于列表
  >>> s
  ['I', 'you']
  >>> s.append('love')      #在列表末尾增加一个单项
  >>> s
  ['I', 'you', 'love']
  >>> s.sort()                  #进行排序,默认是升序(字符串)
  >>> s
  ['I', 'love', 'you']
  >>> s.sort(key=str.lower)      #可以使用name=value语法配置选项,key参数给了一个参数的函数,它返回在排序中使用的值
  >>> s
  ['I', 'love', 'you']
  >>> s.sort(key=str.lower,reverse=True)      #而reverse参数允许使用降序而不是升序
  >>> s
  ['you', 'love', 'I']
  >>>
  注:当使用append和sort原处修改列表对象时,结果并没有返回列表而是NONE,如下
  >>> s
  ['one', 'two', 'three']
  >>> s.append("four")            #使用此方法即可
  >>> s
  ['one', 'two', 'three', 'four']
  >>> s=s.append("five")      #这样的修改对象操作 有点副作用,没有理由重新赋值,使用上面的操作即可
  >>> s
  >>>            #这里是none
  >>>
  >>> s=['one','two','three']
  >>> s.extend(['four','five'])      #同时在末尾添加多个项
  >>> s
  ['one', 'two', 'three', 'four', 'five']
  >>> s.pop()                        #删除末尾的项并返回已删除的项
  'five'
  >>> s.reverse()                  #原处反转
  >>> s
  ['four', 'three', 'two', 'one']
  >>> list(reversed(s))            #反转返回新列表,未保存在s中
  ['one', 'two', 'three', 'four']
  >>> s.index('three')                #查找three的偏移值
  1
  >>> s.insert(1,'test')                  #在偏移1处插入test项
  >>> s
  ['four', 'test', 'three', 'two', 'one']
  >>> s.remove('test')                  #删除一个项
  >>> s.pop(1)                        #删除指定偏移的项
  'three'
  >>> s
  ['four', 'two', 'one']
  >>>
  >>> del s      #删除索引为0的项
  >>> s
  ['two', 'one']      #删除分片从偏移0到末尾
  >>> del s
  >>> s
  []                        #空列表
  >>>
  二、字典:无序的集合,是通过键对字典进行索引操作,不是偏移位置存取。
  1.创建方法
  >>> {'name':'Lili','age':18}                #一次性创建,知道有多少键
  {'name': 'Lili', 'age': 18}
  >>> s={}                                          #动态的创建每一个键及值
  >>> s['name']='Lili'
  >>> s['age']=18
  >>> s
  {'name': 'Lili', 'age': 18}
  >>> dict(name='Lili',age=18)                #代码少,键必须是字符串
  {'name': 'Lili', 'age': 18}
  >>> dict([('name','Lili'),('age',18)])                #程序运行时将键和值逐步建立成序列
  {'name': 'Lili', 'age': 18}
  >>>
  >>> dict.fromkeys(['a','b'],0)               #通过fromkeys简单的传入所有键列表,以及所有键的初始值
  {'a': 0, 'b': 0}
  >>>
  >>> dict.fromkeys('fuck')
  {'f': None, 'u': None, 'c': None, 'k': None}
  >>>
  >>> list(zip(['a','b','c'],))                            #zip函数将对象中对应的元素打包成一个个元组,然后将元组转换为列表
  [('a', 1), ('b', 2), ('c', 3)]
  >>> s=dict(zip(['a','b','c'],))                  #将键和值对应起来传给dict
  >>> s
  {'a': 1, 'b': 2, 'c': 3}
  >>> s={k:v for (k,v)in zip(['a','b','c'],)}            #通过字典解析方法创建字典
  >>> s
  {'a': 1, 'b': 2, 'c': 3}
  >>> s={x:x**2 for x in }
  >>> s
  {1: 1, 2: 4, 3: 9, 4: 16}
  >>> s={x:x*4 for x in 'fuck'}
  >>> s
  {'f': 'ffff', 'u': 'uuuu', 'c': 'cccc', 'k': 'kkkk'}
  >>>
  2.字典的基本操作
  >>> s={'x':3,'y':4,'z':'5'}      #用花括号括起来,使用key:value并用逗号隔开的元素
  >>> s['x']            #使用key键取值,而不是偏移
  3
  >>> s
  {'x': 3, 'y': 4, 'z': '5'}
  >>>
  >>> len(s)      #计算字典的长度
  3
  >>> 'x' in s      #判断键是否存在于字典
  True
  >>> list(s.keys())            #用键来创建一个列表
  ['x', 'y', 'z']
  >>>
  >>> s['x']=['a','b','c']      #在原处直接修改
  >>> s
  {'x': ['a', 'b', 'c'], 'y': 4, 'z': '5'}
  >>> del s['z']                        #del()通过使用key删除一个元素
  >>> s
  {'x': ['a', 'b', 'c'], 'y': 4}
  >>>
  >>> dir(s)                  #字典可用的方法
  ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
  >>> list(s.values())            #通过values方法返回字典中的元素
  [['a', 'b', 'c'], 4]
  >>> list(s.items())            #通过items方法返回字典中的对元组(key,value)
  [('x', ['a', 'b', 'c']), ('y', 4)]
  >>>
  >>> s.get('z')            #使用get()可以判断一个key是否存在并返回其元素
  >>>
  >>> s.get('x')            #使用get()可以判断一个key是否存在并返回其元素并返回其值
  ['a', 'b', 'c']
  >>> print(s.get('z'))            #使用get()可以判断一个key是否存在并返回其元素,若不存在返回none
  None
  >>> s1={'z':5,'a':6}
  >>> s.update(s1)                #将字典s1合并到s中
  >>> s
  {'x': ['a', 'b', 'c'], 'y': 4, 'z': 5, 'a': 6}
  >>> s.pop()                                    #与列表的pop有所不同,列表中pop()可删除最后一个元素并返回其值。但字典不可
  Traceback (most recent call last):
  File &quot;<stdin>&quot;, line 1, in <module>
  TypeError: pop expected at least 1 arguments, got 0
  >>> s.pop('a')                                    #通过pop(键)删除一个元素
  6
  >>>s
  {'x': 1, 'y': 2, 'z': 3}
  >>> for i in s:                  #通过迭代字典中的每一个键,打印他们的键和值。此命令等同于 for i in s.keys().
  ...print(i,'\t',s)
  ...
  x      1
  y      2
  z      3
  >>>
  >>> s={1:3,2:2,3:1}            #键不一定是字符串。只要是不可变的对象都可以(除列表外)
  >>> s
  {1: 3, 2: 2, 3: 1}
  >>>
  3.字典视图
  >>> s
  {'f': 'ffff', 'u': 'uuuu', 'c': 'cccc', 'k': 'kkkk'}
  >>> s.keys()
  dict_keys(['f', 'u', 'c', 'k'])
  >>> d=s.keys()
  >>> d
  dict_keys(['f', 'u', 'c', 'k'])
  >>> list(d)
  ['f', 'u', 'c', 'k']
  >>> f=s.values()
  >>> f
  dict_values(['ffff', 'uuuu', 'cccc', 'kkkk'])
  >>> list(f)
  ['ffff', 'uuuu', 'cccc', 'kkkk']
  >>> del s['f']
  >>> s
  {'u': 'uuuu', 'c': 'cccc', 'k': 'kkkk'}
  >>> list(d)
  ['u', 'c', 'k']
  >>> list(f)
  ['uuuu', 'cccc', 'kkkk']
  >>>
  5.字典键排序
  >>> s=dict(zip(['y','a','x'],))
  >>> s
  {'y': 1, 'a': 2, 'x': 3}
  >>> ks=s.keys()
  >>> list(ks)
  ['y', 'a', 'x']
  >>> ks=list(ks)
  >>> ks
  ['y', 'a', 'x']
  >>> ks.sort()                              #sort()
  >>> ks
  ['a', 'x', 'y']
  >>> for k in ks:print(k,s)
  ...
  a 2
  x 3
  y 1
  >>>
  >>>
  >>> s=dict(zip(['a','c','b'],))
  >>> s
  {'a': 1, 'c': 2, 'b': 3}
  >>> ks=s.keys()
  >>> ks
  dict_keys(['a', 'c', 'b'])
  >>> sorted(ks)                        #sorted()
  ['a', 'b', 'c']
  >>> for k in sorted(ks):print(k,s)
  ...
  a 1
  b 3
  c 2
  >>>
  6.测试字典键是否存在。使用in或者get方法
  >>> s
  {'a': 1, 'c': 2, 'b': 3}
  >>> 'a' in s
  True
  >>> print(s.get('a'))
  1
  >>>
页: [1]
查看完整版本: python--列表与字典