一.使用list
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
1.创建list并查看list
>>> classmates = ['aaa','bbb','ccc']
>>> classmates
['aaa', 'ccc', 'bbb', 'ccc', 'eee']
2.查看list长度
>>> len(classmates)
3
3.用索引来访问list中每一个位置的元素,记索引是从0开始的:
>>> classmates[0]
'aaa'
>>> classmates[1]
'bbb'
#当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,
>>> classmates[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:
同理,计算倒数第二个,第三个…但记得不要超出范围
>>> classmates[-1]
'ccc'
#超范围验证
>>> classmates[-4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
4.list是一个可变的有序表,所以,可以往list中追加元素到末尾(这点和c++里面的list类似):
>>> classmates.append('ddd')
>>> classmates
['aaa', 'bbb', 'ccc', 'ddd']
5.可追加就可以删除,默认尾删
>>> classmates.pop()
'ddd'
>>> classmates
['aaa', 'bbb', 'ccc']
>>> classmates.pop(1)
'bbb'
>>> classmates
['aaa', 'ccc']
#有范围限制,超出范围会报错
>>> classmates.pop(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
6.要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>> classmates
['aaa', 'ccc', 'bbb', 'ccc', 'eee']
>>> classmates[1]='bbb'
>>> classmates
['aaa', 'bbb', 'bbb', 'ccc', 'eee']
>>> classmates[2]='ccc'
>>> classmates[3]='ddd'
>>> classmates
['aaa', 'bbb', 'ccc', 'ddd', 'eee']
7.list元素也可以是另一个list
>>> teacher=['Tom','Jone',['mikko','robot'],'Catte']
>>> teacher
['Tom', 'Jone', ['mikko', 'robot'], 'Catte']
等同于:
>>> p=['mikko','robot']
>>> teacher=['Tom', 'Jone',p, 'Catte']
>>> teacher
['Tom', 'Jone', ['mikko', 'robot'], 'Catte']
8.list元素也可以为空
>>> list=[]
>>> len(list)
0
二:使用touple(又叫元组)
- touple也是python里面的一个有序列表,但是与list不同的是,touple的元素不可变,不可变的意思就是touple的元素一旦确定下来,就不可以更改。其他的使用同list
- touple是用()括号表示:touple=(元素1,元素2,…)
1.1 创建一个list
>>> classmates=['aaa','bbb','ccc']
>>> classmates
['aaa', 'bbb', 'ccc']
更改list元素,更改成功
>>> classmates[0]='eee'
>>> classmates
['eee', 'bbb', 'ccc']
1.2 创建一个元组
>>> touple=('aaa','bbb','ccc')
>>> touple
('aaa', 'bbb', 'ccc')
修改元素,报错
>>> touple[0]='eee'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>
不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
2.如果要定义一个空的tuple,可以写成():
>>> t=()
>>> t
()
3.如果要定义一个元素的元组,你如果这样定义的话
>>> aa=(1)
>>> aa
1
这个时候定义的不是只有一个元素的元组,而是数字‘1’,
这是因为()不仅可以表示元组,还可以表示数学里面的小括号,这就会产生歧义,因此python特别规定,这种情况下按小括号计算,所以结果是1,而不是以元组形式表示的1(元组表示是有小括号的 )
所以只有一个元素的touple定义时,必须加上逗号来消除歧义,
Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。
>>> aa=(1,)
>>> aa
(1,)
4.最后来看一下可变的touple
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
之前说的元组的元素不可变,但是为什么我做了修改,竟然成功了尼?
首先,来看元组包含的三个元素
当我们修改了元素之后:
有没有发现,其实元组的元素没有变,元组索引对应的元素依然还是原来的元素,'指向的list还是原来的list,只是list里面的元素改变了。所以我们能修改成功。
所以由此可见touple的不可变是指每个元素的索引指向不可变,索引1指向‘a’就不能指向‘b’,但是指向的list本身本身元素是可变的.所以我们可以修改。
小结:
- list和touple都是python内置的有序列表,只不过list元素可修改,touple是不可变的。
- touple只有一个元素是要加上逗号,避免歧义