在数据类型和变量中我们提到,python除了整数,浮点数,字符串等数据类型外,还包含列表,字典等数据类型,今天我们来学习列表和元组这两种数据类型。
1.list
list是一种有序的集合,可以随时添加和删除其中的元素,有点类似与C/C++中的数组。例如,列出班级中所有同学的名字,就可以使用list表示:
>>> classmates = ['Michael','Bob','Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
>>> len(classmates)
3
变量classmates就是一个list。如上我们可以使用len()函数来获得list元素的个数。
我们可以使用索引来访问list中每一个位置的元素,索引是从0开始,这点也和数组非常相似。
>>> classmates[0]
'Michael'
>>> classmates[1]
'Bob'
>>> classmates[2]
'Tracy'
>>> classmates[3]
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
classmates[3]
IndexError: list index out of range
当索引超出范围时,会报错。由于索引从0开始,故最后一个元素的索引为元素个数n-1
假如元素个数非常多,而我们只想取后面几个元素,这时如果还采用前述方法,笨重且容易出错,我们可以采用负数作为索引,直接获取后面的元素,例如-1获取最后一个元素,以此类推:
>>> classmates[-1]
'Tracy'
>>> classmates[-2]
'Bob'
>>> classmates[-3]
'Michael'
list是一个可变的有序表,可以追加元素到末尾,插入元素到指定位置,删除指定元素,删除末尾元素等。
追加元素到末尾,使用.append()函数,例:
>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']
插入元素至指定位置,使用.insert()函数,例如插入到元素1后:
>>> classmates.insert(1,'Jack')
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
删除指定元素,使用pop函数,例删除末尾元素:
>>> classmates.pop()
'Adam'
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy']
删除指定元素,例如删除第一个元素:
>>> classmates.pop(1)
'Jack'
>>> classmates
['Michael', 'Bob', 'Tracy']
另外,list里面的元素和数组一样,可以包含不同的数据类型,其中的元素也可以是另外一个list。例如:
>>> L = ['apple',123,True]
>>> L = ['apple',123,True]
>>> s = ['abc','bcd',['art','lg'],'ght']
>>> len(s)
4
注意,s 中只有4个元素,因为s[2]是一个list.那么如何取到s[2]中的元素,或者怎么对这些元素进行操作呢?
此时我们可以看成是一个二维数组,我们看下面的例子:
>>> p = ['bcd','jht']
>>> s = ['abc','python',p,'omd']
>>> s[1]
'python'
>>> s[2]
['bcd', 'jht']
>>> s[2][1]
'jht'
2.tuple
tuple和list非常类似,但是tuple一旦初始化就不能改变,它没有append(),insert()这样的方法,但仍可正常的使用classmates[0],classmates[1]去查询获取元素。因为tuple的不可更改,故你定义一个tuple时就必须把元素确定下来,否则则定义了一个空的tuple。例如:
>>> classmates = ('abc','bcd','def')
>>> classmates[1]
'bcd'
>>> t = (1,2)
>>> t
(1, 2)
>>> t =()
>>> t
()
另外,还需注意的是,如果你定义一个元素的tuple,你必须在元素后面加一个逗号“,”,因为括号既可以表示tuple,,也可以表示数学公式中的小括号,这就产生了歧义,python规定,使用逗号来消除这种歧义。例:
>>> t = (1)
>>> t
1
>>> t = (1,)
>>> t
(1,)
最后,我们在来看一个例子:
>>> t = ('a','b',['x','y'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])
我们看到tuple中的元素变了!!!!!不是说不能改变吗????
其实,tuple所说的元素不可变,是指每个元素的指向不可变,元素0指向’a‘,就不能改成指向’b‘,指向一个list(例子中为['x','y'])就不能指向别的其他对象,但是,指向的这个list是可变的啊!一定要理解计算机的存储方式。下图是一个示意图(转载自廖雪峰网站):