列表
Python 的列表类似于 C/C++ 的数组,但是操作更加灵活。它们没有固定的大小,也没有固定的类型约束。与字符串不同,列表是可变的。
创建列表
列表由方括号 []
和分隔列表中的每个元素的逗号组成。列表可以嵌套。
lst = [1, 2, 3]
- 列表元素可以是不同类型的。
lst = ["lst", 1, 2.3, 4 + 5j, ["lst", 1, 2.3, 4 + 5j]]
# 列表的嵌套可以用像矩阵一样的递进查询。
# lst[0][0] = 'l'
# lst[4][0] = "lst"
- 和字符串一样
len(list)
可以获得列表中项的个数。
len(lst)
索引 & 切片
列表中的索引与切片与字符串的操作一致。lst[a:b]
表示为将列表 lst
从 a 截取至 b-1(左闭右开)。切片操作允许索引越界。
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 指定开始位置和结束位置
print(lst[2:6])
# 单指定开始位置
print(lst[4:])
# 单指定结束位置
print(lst[:-3])
# 越界操作
print(lst[1:100])
输出样例:
[3, 4, 5, 6]
[5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6]
[2, 3, 4, 5, 6, 7, 8, 9]
[::]
的应用
两个 :
操作符将括号内分为三段即:[1:2:3]
。①表示开始索引、②表示结束索引、③表示间隔。要是开始索引也没有结束索引,等价于整个列表。
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(lst[::2])
输出样例:
[1, 3, 5, 7, 9]
基本方法
- 添加元素
①list.append(x)
:在列表末尾添加元素 x
。
②list1 + list2
:通过 +
拼接不同的列表。
③list1.extend(list2)
:和 ② 相同,通过迭代的方式将 list2
的元素依次放入 list1
中。
④list * a
:将 list
列表重复 a 次。
⑤insert(pos, x)
:在索引 pos
处添加元素 x
。
lst1 = [1, 3]
lst2 = [2, 4, 6]
lst1.append(5)
lst3 = lst1 + lst2
print(lst1 + lst2)
lst1.extend(lst2)
print(lst1)
lst3 = lst3 *2
print(lst3)
lst3.insert(3, "insert")
print(lst3)
[1, 3, 5, 2, 4, 6]
[1, 3, 5, 2, 4, 6]
[1, 3, 5, 2, 4, 6, 1, 3, 5, 2, 4, 6]
[1, 3, 5, 'insert', 2, 4, 6, 1, 3, 5, 2, 4, 6]
- 查找元素
①list.count(x)
:查找元素 x
在列表中出现的次数。
lst = [1, 2 ,3 ,4, 3, 2, 1, [2,3], "abc"]
print(lst.count(3))
print(lst.count([2,3]))
print(lst.count("abc"))
2
1
1
②list.index(x)
:查找元素 x
在列表中最先出现的位置,要是不存在返回异常。
lst = [0,1,2,3,4,2,2,2]
print(lst.index(2))
#print(lst.index(5))
2
# ValueError: 5 is not in list
- 删除元素
①list.pop(pos)
:从列表中删除索引为 pos
的元素,当不设置 pos
的时候默认删除最后一个元素。
lst = [0,1,2,3,4,2,2,2]
lst.pop(2)
print(lst)
lst.pop()
print(lst)
[0, 1, 3, 4, 2, 2, 2]
[0, 1, 3, 4, 2, 2]
②list.remove(x)
:从列表中删除最先出现的 x
。
lst = [0,1,2,3,4,2,2,2]
lst.remove(2)
print(lst)
[0, 1, 3, 4, 2, 2, 2]
- 排序
①list.sort(reverse = False)
:将列表 list
排序,当 reverse = False
为升序排列,当 reverse = True
为降序排列。
lst = [1, 3, 2, 4, 6, 5]
lst.sort()
print(lst)
lst.sort(reverse = False)
print(lst)
lst.sort(reverse = True)
print(lst)
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
[6, 5, 4, 3, 2, 1]
②list.reverse()
:将列表翻转。
lst = [1, 3, 2, 4, 6, 5]
lst.reverse()
print(lst)
[5, 6, 4, 2, 3, 1]
- 生成列表
①list(range(a, b, c = 1))
:生成从 a 到 b-1 范围且以 c 为间隔的列表。注意要是不写外层的转换为列表,就会返回一个 range
对象。
lst = range(1, 10)
print(type(lst))
print(list(lst))
print(list(range(1, 10, 2)))
<class 'range'>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 5, 7, 9]
②[function for i in range(a, b, c)]
:通过中括号里的 for
循环创建列表。
print([i*i for i in range(1, 10)])
[1, 4, 9, 16, 25, 36, 49, 64, 81]
③[function for i in range(a, b) for j in range(c, d)]
:②的变式,可通过二层循环生成组合。
print([i+j for i in "123" for j in "abc"])
['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']
- 遍历列表
①for idx,x in enumerate(list)
:遍历列表每个元素并返回索引 idx
和元素 x
。
lst = ["a", "b", "c", "d", "e"]
for idx,x in enumerate(lst):
print("索引:{0}; 元素:{1}".format(idx, x))
索引:0; 元素:a
索引:1; 元素:b
索引:2; 元素:c
索引:3; 元素:d
索引:4; 元素:e
练习
1.创建一个空列表colors, 将元素red, blue, green添加到列表。
2.找到元素blue的索引。
3.在colors列表中的元素blue前面插入元素yellow。
4.在元素green前面插入子列表[ ‘purple’, ‘pink’ ]。
5.创建一个1~7的整数字列表,并添加到colors列表末尾。
6.取出colors列表中索引4-7的元素。
7.取出colors列表中最后3个元素。
8.循环colors列表,打印每个元素的索引值和元素。
9.循环colors表,打印每个元素的索引值和元素,当索引值为偶数时,把对应的元素改成整数0。
参考答案,仅供参考
1.创建一个空列表colors, 将元素red, blue, green添加到列表。
colors = []
colors.append("red")
colors.extend(["blue", "green"])
2.找到元素blue的索引。
colors.index("blue")
3.在colors列表中的元素blue前面插入元素yellow。
colors.insert(colors.index("blue"), "yellow")
4.在元素green前面插入子列表[ ‘purple’, ‘pink’ ]。
colors.insert(colors.index("green"), ["purple", "pink"])
5.创建一个1~7的整数字列表,并添加到colors列表末尾。
colors.extend(list(range(1,8)))
6.取出colors列表中索引4-7的元素。
lst = colors[4:8]
7.取出colors列表中最后3个元素。
lst = colors[-3:]
8.循环colors列表,打印每个元素的索引值和元素。
for idx,x in enumerate(colors):
print("索引:{0}; 元素:{1}".format(idx, x))
9.循环colors表,打印每个元素的索引值和元素,当索引值为偶数时,把对应的元素改成整数0。
for idx,x in enumerate(colors):
if idx%2 == 0:
x = 0
print("索引:{0}; 元素:{1}".format(idx, x))