2.3 列表
2.3.1 列表的创建方法
--- 使用方括号 [] ,括号中的元素之间使用逗号隔开。
>>> [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
>>> lis = ['H', 'e', 'l', 'l', 'o']
>>> lis
['H', 'e', 'l', 'l', 'o']
>>>
--- 使用函数list创建列表,可将任何序列作为list的参数。
>>> list('Hello worl!')
['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', '!']
>>> lis = list("Hello world!")
>>> lis
['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']
>>> lis = list(['H', 'e', 'l', 'l', 'o'])
>>> lis
['H', 'e', 'l', 'l', 'o']
>>>
2.3.2 列表操作
--- 可对列表执行序列的通用操作,如索引,切片,拼接,复制。
--- 修改列表,通过索引指定要修改位置的元素,可修改为相似的元素,也可修改为不一致的元素。
>>> lis = list("Hello world!")
>>> lis
['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']
>>> lis[1] = 'a'
>>> lis
['H', 'a', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']
>>> lis[1] = ['a', 'b', 'c']
>>> lis
['H', ['a', 'b', 'c'], 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']
>>>
--- del 删除列表中的元素,也可删除整个列表。
>>> lis = [1, 2, 3, 4, 5]
>>> lis
[1, 2, 3, 4, 5]
>>> del lis[1]
>>> lis
[1, 3, 4, 5]
>>> del lis
>>> lis
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'lis' is not defined
>>>
--- 给切片赋值,可同时给多个元素赋值,也可将切片替换为长度不同的序列,也可不改变原列表的元素而插入新元素。
>>> lis = list("Hello world!")
>>> lis
['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']
>>> lis[-6:-1] = list("python")
>>> lis
['H', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n', '!']
>>> lis = list("Hello")
>>> lis[2:2] = list('abc')
>>> lis
['H', 'e', 'a', 'b', 'c', 'l', 'l', 'o']
>>>
--- 多重赋值,接收赋值的变量的数量必须和列表的长度严格相等。
>>> lis = [1, 2, 3]
>>> a,b,c = lis
>>> a
1
>>> b
2
>>> c
3
>>> a,b = lis
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
>>>
2.3.3 列表的方法
--- append,就地修改列表,将一个对象附加到列表末尾。(列表专属方法)
>>> lis = [1, 2, 3]
>>> lis.append(4)
>>> lis
[1, 2, 3, 4]
>>> lis = [1, 2, 3]
>>> lis.append([4, 5])
>>> lis
[1, 2, 3, [4, 5]]
>>>
--- insert,将一个对象插入列表,insert带有两个参数,第一个表示插入位置的索引,第二个表示要插入的对象。(列表专属方法)
>>> lis = [1, 2, 3]
>>> lis.insert(1,5)
>>> lis
[1, 5, 2, 3]
>>> lis = [1, 2, 3]
>>> lis.insert(1,[4, 5])
>>> lis
[1, [4, 5], 2, 3]
>>>
--- clear,清空列表中的元素,使其成为空列表。
>>> lis = [1, 2, 3]
>>> lis.clear()
>>> lis
[]
>>>
--- copy,使用常规的‘=’号赋值方式来复制,只是起到关联内存位置的作用,copy则是拷贝了一个副本到新的内存位置。
>>> lis_1 = [1, 2, 3]
>>> lis_2 = lis_1
>>> id(lis_1)
140151340507336
>>> id(lis_2)
140151340507336
>>> lis_2[0] = 5
>>> lis_2
[5, 2, 3]
>>> lis_1
[5, 2, 3]
>>>
>>> lis_1 = [1, 2, 3]
>>> lis_2 = lis_1.copy()
>>> id(lis_1)
140151340498312
>>> id(lis_2)
140151340507208
>>> lis_2[0] = 5
>>> lis_2
[5, 2, 3]
>>> lis_1
[1, 2, 3]
>>>
--- extend,同时将多个值附加到列表末尾。常规通过“+”运算符拼接两个列表,新的结果放到新的内存地址空间。而extend则在原内存地址空间把值附加进去。
>>> lis_1 = [1 ,2]
>>> lis_2 = [3 ,4]
>>> lis_1 + lis_2
[1, 2, 3, 4]
>>> lis_1
[1, 2]
>>> lis_1 = [1 ,2]
>>> lis_2 = [3 ,4]
>>> lis_1.extend(lis_2)
>>> lis_1
[1, 2, 3, 4]
>>>
--- count,计算指定元素在列表中存在的次数。
>>> lis = list('Hello world!')
>>> lis.count('e')
1
>>> lis.count('l')
3
>>> lis.count('o')
2
>>>
--- index,在列表中查找指定值第一次出现的位置的索引。
>>> lis = [1, 2, 3, 1, 2, 1]
>>> lis.index(2)
1
>>> lis.index(1)
0
>>>
--- remove,删除指定值在列表中第一次出现的元素。
>>> lis = [1, 2, 3, 1, 2, 1]
>>> lis.remove(2)
>>> lis
[1, 3, 1, 2, 1]
>>>
--- pop,删除指定索引位置的一个元素,并把删除元素返回(默认则删除列表末尾一个元素)。
>>> lis = [1, 2, 3, 4, 5]
>>> lis.pop(2)
3
>>> lis
[1, 2, 4, 5]
>>> lis.pop()
5
>>> lis
[1, 2, 4]
>>>
--- reverse,按相反的顺序排列列表中的元素。
>>> lis = [1, 2, 3]
>>> lis.reverse()
>>> lis
[3, 2, 1]
>>>
--- sort,对列表就地排序,按ASCII码表顺序,且列表中元素必须是同类型数据。
>>> lis = ['a', 'A', 'z', 'Z']
>>> lis.sort()
>>> lis
['A', 'Z', 'a', 'z']
>>> lis = [1, 2, 'a', 'A']
>>> lis.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'int'
>>>
2.3.4 列表可用于循环
>>> for i in [1, 2, 3, 4]:
... print(i*2)
...
2
4
6
8
>>>
>>> lis = [1, 2, 3, 4, 5]
>>> for i in range(len(lis)):
... print("lis[" + str(i) + "]:" + str(lis[i]))
...
lis[0]:1
lis[1]:2
lis[2]:3
lis[3]:4
lis[4]:5
>>>
2.4 元组
--- 与列表一样,元组也是序列,唯一的差别是元组不能修改。
--- 元组的创建,使用逗号分隔,使用圆括号括起。(逗号很重要)
>>> (1, 2, 3)
(1, 2, 3)
>>> (1)
1
>>> (1,)
(1,)
>>> type((1))
<class 'int'>
>>> type((1,))
<class 'tuple'>
>>> 3 * (40 + 2)
126
>>> 3 * (40 + 2,)
(42, 42, 42)
>>>
--- 元组的创建,使用函数tuple,将一个序列作为参数,并将其转换为元组。如果参数已经是元组,则原样返回。
>>> tuple([1, 2, 3])
(1, 2, 3)
>>> tuple("Hello world!")
('H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!')
>>> tuple((1, 2, 3, 4, 5))
(1, 2, 3, 4, 5)
>>>