一、列表(list)
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
例如:列出一些人名:
>>> name=['Mike','Lucy','Jane']
>>> name
['Mike', 'Lucy', 'Jane']
>>> type(name)
<class 'list'>
其中name就是一个list,用len函数可以获取列表元素的个数:
>>> len(name)
3
1.索引操作
>>> name[1]#正向索引(左往右索引,从0开始)
'Lucy'
>>> name[-1]#负向索引(右往左索引,从-1开始)
'Jane'
>>> name[3]#正向索引越界
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
name[3]
IndexError: list index out of range
>>> name[-4]#负向索引越界
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
name[-4]
IndexError: list index out of range
2.添加元素
#添加元素到列表末尾
>>> name.append('Bob')
>>> name
['Mike', 'Lucy', 'Jane', 'Bob']
#在列表中指定位置插入新元素
>>> name.insert(1,'Nike')#将新元素插入到列表中索引为1的元素之前
>>> name
['Mike', 'Nike', 'Lucy', 'Jane', 'Bob']
3.删除元素
#删除列表最后一个元素
>>> name.pop()
'Bob'
>>> name
['Mike', 'Nike', 'Lucy', 'Jane']
#删除列表指定位置的元素
>>> name.pop(1)#删除列表中索引为1的元素
'Nike'
>>> name
['Mike', 'Lucy', 'Jane']
4.元素的替换
#直接采用索引赋值的方式即可
>>> name[1]='Peter'
>>> name
['Mike', 'Peter', 'Jane']
5.补充
list的元素类型可以不同,如
>>> L = ['Apple', 123, True]
list的元素也可以是另外一个list,如
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
>>> len(s)
4
要拿到'php'
可以用s[2][1]
,因此s可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。
如果一个list中一个元素也没有,就是一个空的list,它的长度为0:
>>> L = []
>>> len(L)
0
二、元组(tuple)
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:
>>> classmates = ('Michael', 'Bob', 'Tracy')
现在,classmates
这个tuple
不能变了,它也没有append()
,insert()
这样的方法。其他获取元素的方法和list是一样的,也可以正常地使用classmates[0]
,classmates[-1]
,但不能赋值成另外的元素。
不可变的tuple可以使代码更安全。如果可能,能用tuple代替list就尽量用tuple。
tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:
>>> t = (1, 2)
>>> t
(1, 2)
#定义空元组
>>> t=()
>>> t
()
#定义只有一个元素的元组(要在元素后面加上逗号)
>>> tuple_1=(1)
>>> type(tuple_1)
<class 'int'>
>>> tuple_2=(1,)
>>> type(tuple_2)
<class 'tuple'>
注意:元组里的元素如果有列表,那么该列表里的元素可以改变,因为此时元组里的元素其实是没有改变的,tuple指向的那个list还是那个list。所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a'
,就不能改成指向'b'
,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!例子:
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
此时运行不报错,说明该元组是“可变的”