list(目录):
内容可变,可重复,例如:
>>> a=['wen','wen'] >>> a ['wen', 'wen']
可以通过a[0]访问,可使用append,pop,insert操作。
tuple(元组):
内容不可变,可重复,例如:
>>> c=(1,1,2) >>> c (1, 1, 2)
当元组元素只有一个的时候,需要这样赋值:
>>> t=(1,) >>> t (1,)
“可变”元组:
>>> p=(1,a) >>> p (1, ['wen', 'wen']) >>> a[1]='love' >>> p (1, ['wen', 'love'])
元组实际并不改变,p(1)只是指向a而不对a的内容操作,而a作为list是可变的,所以元组看起来是“可变”的
可通过p[0]访问。
dict(字典):
(key-value)赋值模式,不可重复,重复的内容会替换前面相同的内容,例如:
>>> a={'wen':1,'wen':2} >>> a {'wen': 2} >>> len(a) 1
读取内容:
>>> d={'wen':1} >>> d {'wen': 1} >>> d['wen'] 1
元组可以作为dict的key(其内容不可变),重新赋值key的value会冲掉旧的value:
>>> d={'wen':1,c:2} >>> d {'wen': 1, (1, 1, 2): 2} >>> d[c] 2 >>> d['wen']=4 >>> d {'wen': 4, (1, 1, 2): 2}
此时如果将c从一个tuple变成一个list,结果会是怎样呢?
>>> c=['wen'] >>> d {'wen': 4, (1, 1, 2): 2} >>> c ['wen']
可以看出d={‘wen':1,c:2}的语句中,d指向c,而且复制了c的内容储存到自身,但当c的内容改变时,虽然c的内容在自身,但无法指向c,导致访问不了d[c]
>>> d[c] Traceback (most recent call last): File "<pyshell#128>", line 1, in <module> d[c] TypeError: unhashable type: 'list'
可以直接访问对元组或对元组的value进行操作:
>>> d[(1,1,2)] 2
所以dict的key仍是不可重复,不可变的。
判断是否存在某个key:
一种通过in
>>> '3' in d False
或者用get(),如果key不存在,可以返回None(在python的交互环境不显示结果),或者自己指定的value:
>>> d.get('3') >>> d.get('3', -1) -1
也可以不输入value(但此时就没有用dict的意义,不如用下文的set):
赋值:
>>> b={'wen'} >>> b {'wen'}
不会重复:
>>> b={'wen','wen'} >>> b {'wen'}
元组一样可以作为key:
>>> a=(1,1,2) >>> b={'wen',a} >>> b {'wen', (1, 1, 2)}
通过d[key]访问,用d.pop(key)删除key和对应的value。
set,一组key的集合,无重复,只有一组参数:
赋值:
>>> s = set([1, 2, 3]) >>> s {1, 2, 3} >>> s = set([1, 1, 3]) >>> s {1, 3} >>> s = set([1, 2, 3],[2,3,4]) Traceback (most recent call last): File "<pyshell#188>", line 1, in <module> s = set([1, 2, 3],[2,3,4]) TypeError: set expected at most 1 arguments, got 2
很明显当参数为2的时候,程序会报错,set实际就是一组无序,无重复的集合。(注意,是无序,输出的只是元素的顺序)
set还可以用于做交集或并集,详情见链接:https://www.cnblogs.com/xikl/p/12014317.html
通过add(key)可以添加元素(元组也可以添加),remove(key)可以删除元素
>>> c (1, 2, 3) >>> s.add(c) >>> s {1, 3, (1, 2, 3)} >>> s.remove(c) >>> s {1, 3}