list
列表(list)是python内置的一种数据结构,是一种有序的集合,可以随时添加和删除其中的元素。
例如
>>> names=['zhangsan','lisi','wangwu']
>>> names
['zhangsan', 'lisi', 'wangwu']
变量names就是一个list.用len()函数就可以得到list元素的个数:
>>> len(names)
3
用索引来访问list中每一位置的元素,从0开始;
>>> names[0]
'zhangsan'
>>> name[1]
'lisi'
>>> names[2]
'wangwu'
>>> names[3]
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
names[3]
IndexError: list index out of range
因list中只有names[0],names[1],names[2]三个元素,names[3]超出范围,提出错误。
如果要获取最后一个元素,除了计算索引外,还可以用-1作索引,直接获取最后一个元素:
>>> names[-1]
'wangwu'
同样地得到倒数第2个,倒数第3个:
>>> names[-2]
'lisi'
>>> names[-3]
'zhangsan'
list是可变的有序表,可以追加元素到list末尾:
>>> names.append('zhaoliu')
>>> names
['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
也可以把元素追加到指定的位置,比如2:
>>> names.insert(2,'Mike')
>>> names
['zhangsan', 'lisi', 'Mike', 'wangwu', 'zhaoliu']
要删除list末尾的元素用pop():
>>> names.pop()
'zhaoliu'
要删除list指定位置,用pop(i),i表示索引位置;
比如删除names[2]:
>>> names.pop(2)
'Mike'
>>> names
['zhangsan', 'lisi', 'wangwu']
要把某个元素替换成别的元素,直接赋值给对应的索引位置:
>>> names[1]='Jack'
>>> names
['zhangsan', 'Jack', 'wangwu']
list里面的数据类型也可以不同,比如:
>>> L=['sdjkd',1234,True]
>>> L
['sdjkd', 1234, True]
list元素也可以是另一个list:
>>> S=['dgial','diuh',['sf','sfsfgs'],123]
>>> len(S)
4
>>> S
['dgial', 'diuh', ['sf', 'sfsfgs'], 123]
也可以拆开写:
>>> P=['sf','sfsfgs']
>>> S=['dgial','diuh',P,123]
>>> S
['dgial', 'diuh', ['sf', 'sfsfgs'], 123]
要得到‘’sf‘’,可以写P[0],或S[2][0],S可以看成是一个二维数组:
>>> P[0]
'sf'
>>> S[2][0]
'sf'
如果list里面一个元素也没有,就是一个空的list,长度为0:
>>> L=[]
>>> len(L)
0
tuple
另一种有序列表叫元组:tuple,tuple和list非常类似,但是一旦初始化就不能修改:
>>> names=('ads','gbee','wr')
>>> names[0]
'ads'
现在names这个tuple不能变了,它也没有append(),insert()这样的方法,也不可赋值成另外的元素。其他获取元素的方法和list是一样的。
注意:当你定义一个tuple时,在定义的时候tuple元素就必须要确定下来:
>>> t=(1,2,3)
>>> t
(1, 2, 3)
如果要定义一个空的tuple,可以写成:
>>> t=()
>>> t
()
但是要定义只有一个元素的tuple,如果这么写:
>>> t=(1)
>>> t
1
那么定义的就不是tuple,而是1这个数,因为括号既可以表示tuple,也可以表示数学公式的小括号,产生歧义。因此python规定,在这种情况下,按小括号计算。
所以,定义只有一个元素的tuple时,必须加‘,’来消除歧义:
>>> t=(1,)
>>> t
(1,)
“可变”tuple:
>>> t=('a','b',['A','B'])
>>> t[2][0]='x'
>>> t[2][1]='y'
>>> t
('a', 'b', ['x', 'y'])
这时候有3个元素,分别是’a’,'b’和一个list,不是说tuple一旦定义,就不能更改吗,那这是为什么呢
表面上看,tuple中的元素确实改变了,但其实改变的不是tuple中的元素,而是list中的元素,tuple一开始指向的list并没有改成别的list。所以tuple所谓的‘不变’是表示tuple的每一个元素指向不变,即指向‘a’,就不能改变成指向‘b’,指向list,就不能指向另外的list,但是可以改变list本身中的元素。
list和tuple是python内置的有序集合,一个可变,一个不可变,根据需要选择。