列表, 是在爬虫中未来遇见的仅次于字符串的一种数据类型. 它主要是能承载大量的数据。理论上,你的内存不爆炸,它就能一直存数据。
列表不同于字符串,它是在原有的基础上进行操作的。
列表承载的数据量是非常大的,列表本身就是可变的,所有的操作都是在原来的列表上进行操作。
(1)创建新列表
创建新列表的两种方式
list_01 = []
list_01 = list()
(2)索引和切片
列表的索引和切片逻辑与字符串完全一致
注意:如果列表中没有数据. 取0会报错。如果给出的索引下标超过了列表的最大索引. 依然会报错
2.1 取出指定的列表元素
lst = ["仙1", "仙2", "仙3", "古1", "古2", "古3"]
item_0 = lst[0]
item_1 = lst[1]
print(item_0, item_1)
# 结果
# 仙1 仙2
2.2 切片取数据
lst = ["仙1", "仙2", "仙3", "古1", "古2", "古3"]
print(lst[3:])
# 结果
# ['古1', '古2', '古3']
(3)增加数据
3.1 append:给列表添加数据,使用append在列表末尾增加数据
lst = []
lst.append("云天河")
lst.append("云天青")
print(lst)
# 结果
# ['云天河', '云天青']
3.2 insert:在指定位置增加数据,原来的数据会往后移动
lst = ["仙1", "仙2", "仙3", "仙4", "仙5"]
lst.insert(2, "仙3问情")
print(lst)
# 结果
# ['仙1', '仙2', '仙3问情', '仙3', '仙4', '仙5']
(4)列表合并
使用 extend 将两个列表进行合并
list_01 = ["仙1", "仙2", "仙3"]
list_02 = ["古1", "古2", "古3"]
list_01.extend(list_02)
print(list_01)
# 结果
# ['仙1', '仙2', '仙3', '古1', '古2', '古3']
(5)删除数据
5.1 pop:使用索引进行删除
list_01 = ["仙1", "仙2", "仙3"]
list_01.pop(1)
print(list_01)
# 结果
# ['仙1', '仙3']
5.2 remove:指定你要删除的元素
list_01 = ["仙1", "仙2", "仙3"]
list_01.remove("仙1")
print(list_01)
# 结果
# ['仙2', '仙3']
5.3 删除列表中的数据会出现的错误
lst = ["张无忌", "张三丰", "云天河", "云天青", "张三", "李四"]
for item in lst:
if item.startswith("张"):
lst.remove(item)
print(lst)
# 结果
# ['张三丰', '云天河', '云天青', '李四']
分析
原始列表与索引
0 1 2 3 4 5
lst = ["张无忌", "张三丰", "云天河", "云天青", "张三", "李四"]
刚开始的时候,循环从0开始,索引为0,然后 张无忌 是以张开头,被删除,此时列表变为
0 1 2 3 4
lst = ["张三丰", "云天河", "云天青", "张三", "李四"]
此时 张三丰 被放到了第一位,但是for循环使得列表指向下一个,索引为1,导致 张三丰 没有被判断,直接从 云天河 开始判断
解决方案1:使用 lst [:],使用切片,循环的是切片切出来的列表
循环列表的同时,想要删除列表中的内容,用切片整体切下来
lst = ["张无忌", "张三丰", "云天河", "云天青", "张三", "李四"]
for item in lst[:]:
if item.startswith("张"):
lst.remove(item)
print(lst)
# 结果
# ['云天河', '云天青', '李四']
解决方案2:临时列表
把所有要删的内容放到一个临时的列表当中
目的都是让删除的列表和循环的列表不是同一个列表
lst = ["张无忌", "张三丰", "云天河", "云天青", "张三", "李四"]
temp_list = []
for item in lst:
if item.startswith("张"):
temp_list.append(item)
for i in temp_list:
lst.remove(i)
print(lst)
# 结果
# ['云天河', '云天青', '李四']
(6)修改列表
使用索引重写指定数据即可
list_01 = ["仙1", "仙2", "仙3"]
list_01[1] = "古1"
print(list_01)
# 结果
# ['仙1', '古1', '仙3']
(7)range
用for循环数数的一个东西
语法:range(起始数据,结尾数据,步长),注意顾头不顾尾
# 从0数到9
for i in range(10):
print(i)
# 从5 数到 9
for i in range(5, 10):
print(i)
# 1,3,5,7,9
for i in range(1, 10, 2):
print(i)
使用range知道索引。
可以循环出列表的索引,有了索引就可以随意的提取数据
例题:把lst中每一项数据增加10
(1)使用range
lst = [11, 22, 33, 44]
for i in range(len(lst)):
lst[i] = lst[i] + 10
print(lst)
# 结果
# [21, 32, 43, 54]
(2)使用 enumerate(),可以同时拿到索引和元素
lst = [11, 22, 33, 44]
for i, item in enumerate(lst):
lst[i] = item + 10
print(lst)
# 结果
# [21, 32, 43, 54]
网友评论