美文网首页
爬虫_005_Python列表

爬虫_005_Python列表

作者: 为宇绸缪 | 来源:发表于2023-01-08 20:29 被阅读0次

    列表, 是在爬虫中未来遇见的仅次于字符串的一种数据类型. 它主要是能承载大量的数据。理论上,你的内存不爆炸,它就能一直存数据。
    列表不同于字符串,它是在原有的基础上进行操作的。
    列表承载的数据量是非常大的,列表本身就是可变的,所有的操作都是在原来的列表上进行操作。
    (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]
    

    相关文章

      网友评论

          本文标题:爬虫_005_Python列表

          本文链接:https://www.haomeiwen.com/subject/gcjycdtx.html