1、列表(list):
python内置的一种数据类型,是一种有序的集合,可以随时添加和删除其中的元素。(可变)
classmates=['Michael','Bob','Tracy']
print(classmates) #['Michael', 'Bob', 'Tracy']
print(len(classmates)) #3
print(classmates[0]) #Michael
print(classmates[1]) #Bob
print(classmates[2]) #Tracy
#print(classmates[3]) #报错
print(classmates[-1]) #Tracy
print(classmates[-2]) #Bob
print(classmates[-3]) #Michael
#print(classmates[-3]) #下标越界,报错
1)追加元素到未尾:append()
classmates=['Michael','Bob','Tracy']
print(classmates) #['Michael','Bob','Tracy']
classmates.append('Adam')
print(classmates) #['Michael', 'Bob', 'Tracy', 'Adam']
2)把元素插入到指定的位置:insert(位置,插入的元素)
classmates=['Michael','Bob','Tracy']
print(classmates) #['Michael','Bob','Tracy']
classmates.insert(1,'Jack')
print(classmates) #['Michael', 'Jack', 'Bob', 'Tracy']
3)删除list未尾的 元素:pop()
classmates=['Michael','Bob','Tracy']
print(classmates) #['Michael','Bob','Tracy']
classmates.pop()
print(classmates) #['Michael','Bob']
4)删除指定位置的元素:pop(指定位置)
classmates=['Michael','Bob','Tracy']
print(classmates) #['Michael','Bob','Tracy']
classmates.pop(1)
print(classmates) #['Michael','Tracy']
5)替换某个元素,直接附值:
classmates=['Michael','Bob','Tracy']
print(classmates) #['Michael','Bob','Tracy']
classmates[1]='Sarah'
print(classmates) #['Michael','Sarah','Tracy']
6)list元素数据类型可以不同,也可以包含另外一个list
s=['python','java',['asp','php','javascript'],'scheme']
print(s) #['python','java',['asp','php','javascript'],'scheme']
print(len(s)) #4
print(s[2][0]) #asp
print(s[2][1]) #php
print(s[2][2]) #javascript
7)list中的元素可以是不同类型:
L=['Apple',123,True]
print(L) #['Apple',123,True]
8)空的list
X=[]
print(X) #[]
print(len(X)) #0
2、tuple:元组,(不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。)
是一个有序列表,一旦初始化不能修改。(不变,因为不变所以没有append、insert、pop这样的操作)
classmates1=('Michael','Bob','Tracy')
print(classmates1) #('Michael','Bob','Tracy')
print(len(classmates1) #3
1)空的tuple:
t=()
print(t) #()
2)只有一个元素的tuple:
T1=(1) 定义的不是tuple,是1
这个数!这是因为括号()
既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1
。
所以,只有1个元素的tuple定义时必须加一个逗号,
,来消除歧义:
t1=(1)
print(t1) #1
t2=(1,)
print(t2) #(1,) 这才是正确表示只有一个元素的tuple的方式
3)可变的tuple:
Y=('a','b',['A','B'])
print(Y[2][0]) #A
print(Y[2][1]) #B
print(Y) #('a','b',['A','B'])
Y[2][0]='X'
Y[2][1]='Y'
print(Y) #('a', 'b', ['X', 'Y'])
Y[2].append('C')
print(Y) #('a','b',['A','B','C'])
tuple所谓的“不变”是说,tuple的每个元素,指向永远不变,即指向'a'
,就不能改成指向'b'
,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
3、dict:字典,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度
1)dict :为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
d={'Michael':95,'Bob':75,'Tracy':85}
print(d['Michael']) #95
d['Adam']=67
print(d['Adam']) #67
d['Adam']=76
print(d['Adam']) #76
2)打印不存在的key时会报错:
d={'Michael':95,'Bob':75,'Tracy':85}
print(d['Tomas']) #KeyError: 'Tomas'
要避免key不存在的错误,有两种办法,一是通过in
判断key是否存在,二是通过dict提供的get()
方法,如果key不存在,可以返回None
,或者自己指定的value
d={'Michael':95,'Bob':75,'Tracy':85}
print('Adam' in d) #False
print('Bob' in d) #True
print(d.get('Adam')) #None
print(d.get('Adam',-1)) #-1,指定了一个“-1”的值
3)要删除一个key,用pop(key)
方法,对应的value也会从dict中删除:
d={'Michael':95,'Bob':75,'Tracy':85}
print(d) #{'Michael': 95, 'Bob': 75, 'Tracy': 85}
d.pop('Tracy')
print(d) #{'Michael': 95, 'Bob': 75}
4)请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。
dict中有两个一样的Key,后面的值会冲掉前面的值:
d={'Michael':95,'Bob':75,'Tracy':85}
print(d) #{'Michael': 95, 'Bob': 75, 'Tracy': 85}
d['Tracy']=91
print(d) #{'Michael': 95, 'Bob': 75, 'Tracy': 91}
d['Tracy']=97
print(d) #{'Michael': 95, 'Bob': 75, 'Tracy': 97}
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。
在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。
4、set:
1)set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:
s=set([1,2,3])
print(s) #{1, 2, 3}
传入的参数[1, 2, 3]
是一个list,而显示的{1, 2, 3}
只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。
2)重复元素在set中自动被过滤:
s=set([1,1,1,2,2,3])
print(s) #{1, 2, 3}
3)通过remove(key)
方法可以删除元素:
s=set([1,1,1,2,2,3])
print(s) #{1, 2, 3}
s.remove(2)
print(s) #{1, 3}
4)set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
s=set([1,2,3,4])
s1=set([2,3,5,6,7])
print(s&s1) #{2, 3}
print(s|s1) #{1, 2, 3, 4, 5, 6, 7}