可以将列表和元组当成普通的“数组”,它能保存任意数量任意类型的Python 对象。和数
组一样,通过从0 开始的数字索引访问元素,但是列表和元组可以存储不同类型的对象。列表和元组有几处重要的区别。列表元素用中括号( [ ])包裹,元素的个数及元素的值可以改变。元组元素用小括号(( ))包裹,不可以更改(尽管他们的内容可以)。元组可以看成是只读的列表。通过切片运算( [ ] 和 [ : ] )可以得到子集(子集还是列表或者元组),这一点与字符串的使用方法一样。列表:可以被修改,可以增长可以缩短,也可以嵌套。
>>> list1 = [1, 'nihao', 3.14, 50, 1000]
>>> list1[3]50>>> list1.append(2) #append()方法只能在末尾追加>>> list1[1, 'nihao', 3.14, 50, 1000, 2]>>> list1
['nihao', 3.14, 50, 100, 2, '父亲', '5']>>> list1.insert(0, 23) #insert(n, x)可以在任意位置追加元素,插在第n号元素之后,索引值n超过原列表值时,直接追加在末尾>>> list1[23, 'nihao', 3.14, 50, 100, 2, '父亲', '5']>>> list1.insert(8, 1000)
>>> list1[23, 'nihao', 3.14, 50, 100, 2, '父亲', '5', 1000]>>> list1.insert(11, 10000)
>>> a
[12, 11, 23, 45, 619000.0]
>>> b
[2.0, [1, 'hello'], 13]
>>> a[2] = [23] ###等号右边是一个列表,原列表中的该元素被替换成一个列表
>>> a
[12, 11, [23], 45, 619000.0]
>>> a[2] = 3.14 ###等号右边是一个数字,替换之后依旧是数字
>>> a
[12, 11, 3.14, 45, 619000.0]
>>> b[1][1] ###用两个分号访问和更新列表中列表的元素
'hello'
>>> b[1][1] = 'world' ###元素依旧是字符串
>>> b
[2.0, [1, 'world'], 13]
>>> b[1][1] = [2, 'nihao'] ###元素替换成列表
>>> b
[2.0, [1, [2, 'nihao']], 13]
以上这两种操作都是单个元素插入,当我们需要将大量数据放在列表末尾的时候,我们就需要extend()方法了。
>>> list1
[23, 3.14, 2, '5']>>> list1.extend(['邓艾', 9999])>>> list1[23, 3.14, 2, '5', '邓艾', 9999]>>> list1.extend(10)
Traceback (most recent call last): File "<pyshell#87>", line 1, in <module> list1.extend(10)TypeError: 'int' object is not iterable >>> list1[2:4][3.14, 50]>>> list1[4] = 100>>> list1[1, 'nihao', 3.14, 50, 100, 2]>>> len(list1)6>>> list1[6] =KeyboardInterrupt>>> list1[6] = '小甲鱼'Traceback (most recent call last): File "<pyshell#41>", line 1, in <module> list1[6] = '小甲鱼'IndexError: list assignment index out of range
删除列表中的元素的方法:
>>> list1
[23, 'nihao', 3.14, 2, '父亲', '5']>>> del list1[1] #知道位置,不知道内容,用del>>> list1[23, 3.14, 2, '父亲', '5']>>> list1.remove('父亲') #知道内容,但是不知道位置,用remove()方法>>> list1[23, 3.14, 2, '5']>>> member
['a', 'ATG', 3.14, 500]>>> member.pop(0) #pop()方法也可用来删除元素,默认取出最后一个元素并返回。加上参数(即列表索引值)时,取出对应元素。'a'>>> member['ATG', 3.14, 500]>>> member.pop()500>>> member['ATG', 3.14]>>> list2 = member.pop()>>> list2
3.14>>> member
['ATG']字符串可以用‘+’拼接,用‘*’进行复制若干次。列表同样也可以。
>>> list1 = [123, 345]
>>> list2 = [234, 456]
>>> list3 = list1 + list2
>>> list3
[123, 345, 234, 456]
>>> list3 *= 3
>>> list3
[123, 345, 234, 456, 123, 345, 234, 456, 123, 345, 234, 456]
>>> list4 = list2 * 2
>>> list4
[234, 456, 234, 456]
列表中可以包罗万象,甚至是列表。那么对于列表中的列表中的元素,其成员关系如何呢?
>>> list5 = [11, [23,34]]
>>> 23 in list5False>>> [23, 34] in list5 ##in 和 not in只能判断一个层次的成员关系。True>>> 34 in list5[1]
True访问列表中列表中的值,应该如何访问:用两个方括号
>>> list5[1][1]
34list.index()返回元素的索引值;list.sort()按大小顺序排列列表list.reverse()反向排序;list.count()计算列表中制定元素出现的次数。要拷贝列表,使用分片的方式>>> listA = list3[:]
>>> listA[456, 456, 456, 345, 345, 345, 234, 234, 234, 123, 123, 123]>>> list3.sort()>>> list3[123, 123, 123, 234, 234, 234, 345, 345, 345, 456, 456, 456]>>> listA[456, 456, 456, 345, 345, 345, 234, 234, 234, 123, 123, 123]
元组:跟列表一样,元组也可以向字符串那样使用'+','*',也可以切片和利用索引值访问元组。
>>> Tuple = ('robots', 77, 99,9, "try")>>> Tuple('robots', 77, 99, 9, 'try')>>> len(Tuple)5>>> Tuple[4:]('try',)>>> Tuple[:4]('robots', 77, 99, 9)>>> Tuple[1]
77
>>> Tuple[1] = 4Traceback (most recent call last): File "<pyshell#47>", line 1, in <module> Tuple[1] = 4TypeError: 'tuple' object does not support item assignment>>> Tuple.append(2)Traceback (most recent call last): File "<pyshell#48>", line 1, in <module> Tuple.append(2)AttributeError: 'tuple' object has no attribute 'append'利用切片将元组切片之后,然后加上新的元素,间接更新一个元组或者利用切片间接删除一个元素。
>>> tuple4
('小甲鱼', 'nihao', 10, '一刀', 1, 'China', 3.14)
>>> tuple5 = tuple4[:3] + ('戈多',) + tuple4[3:] ##这里('戈多',)的逗号和括号都不能少
>>> tuple5
('小甲鱼', 'nihao', 10, '戈多', '一刀', 1, 'China', 3.14)
>>> tuple6 = tuple4[:2] + tuple4[4:]
>>> tuple6
('小甲鱼', 'nihao', 1, 'China', 3.14)
当创建的元组中只有一个元素时,要在这个元素后面加上',',以确保它是一个元组。
>>> tuple1 = (9)
>>> type(tuple1)<class 'int'>>>> tuple1 = (9,) ##可以看出元组的关键符号是',',而不是小括号。但是列表的关键就是中括号>>> type(tuple1)<class 'tuple'>>>> tuple1 = 1, 2, 3>>> type(tuple1)<class 'tuple'>
连接操作符、重复操作符、成员关系操作符、逻辑操作符都可以用在元组和列表上。