• python-(4-2)数据类型的应用(列表)


    列表

    1.定义和表示

    列表就是表示东西的东西,通过中括号[]表示,不同内容用逗号隔开

    2.特性

    2-1 与字符串一样,也有索引和切片;当索引超过范围时会报错。

    list = ["Alex", "Bob", "Cindy", "David"]
    print(list[2])
    print(list[::-2])
    
    • 1
    • 2
    • 3

    执行代码结果如下:

    在这里插入图片描述

    2-2 也可以通过for循环来遍历列表的每一个元素

    在这里插入图片描述

    2-3 用print(len(list))表示列表的长度,即列表元素的个数

    2-4 列表内部可以进行嵌套

    存在一个嵌套的列表

    list = ["123", "abc", ["Alex",["Nancy", "孙悟空", "pqk"],"哈哈"],"1aq"]
    
    • 1

    想要查找到孙悟空,可以通过索引操作。孙悟空在大列表中索引为2的列表中,并进一步在该列表索引为1的列表,最后再进入列表索引为1位置,就是最终的结果。

    print(list[2][1][1])
    
    • 1

    如果想更进一步,查找到孙悟空,并将其修改为孙尚香,借用字符串修改的replace(),即可

    print(list[2][1][1].replace("悟空","尚香"))
    
    • 1

    注意,由于字符串是不可变的,我这里的list[2][1][1].replace("悟空","尚香")实际上已经是一个新的变量,所以此处输出的是一个字符串,而非列表。如果想输出一个修改后的新的列表,需要进行替换操作,代码如下:

    list = ["123", "abc", ["Alex",["Nancy", "孙悟空", "pqk"],"哈哈"],"1aq"]
    list[2][1][1] = list[2][1][1].replace("悟空","尚香")
    print(list)
    
    • 1
    • 2
    • 3

    3.增删改查

    3-1 添加

    首先,创建一个空列表,模拟测试环境

    list = []
    
    • 1

    然后依次向列表中追加元素

    list.append("詹姆斯")
    list.append("贾巴尔")
    list.append("拉塞尔")
    
    • 1
    • 2
    • 3

    最后输出列表内容print(list),查看结果如下:

    ['詹姆斯', '贾巴尔', '拉塞尔']
    
    • 1

    append("元素")表示从列表元素的最后一个开始追加内容。

    紧接着上面的例子,我要在詹姆斯的前面加上乔丹,在拉塞尔的前面加上约翰逊

    此时就应该插入元素,而不是追加元素了。

    list.insert(0, "乔丹")
    
    • 1

    使用insert(索引,"元素")时,将乔丹放在索引为0的位置,原列表中索引为0的詹姆斯以及后面的元素就会自动向后退一个位置,于是结果如下:

    ['乔丹', '詹姆斯', '贾巴尔', '拉塞尔']
    
    • 1

    同理:

    list.insert(3, "约翰逊")
    
    • 1

    原索引位置为3的拉塞尔也会被新插入的约翰逊挤走位置。
    可以理解为堵车的加塞,你的前面被插入了一辆轿车,你无可奈何只能接受,你和你后面的所有车都相当于自动后退一个位置。

    此时列表就变成了这个样子。

    ['乔丹', '詹姆斯', '贾巴尔', '约翰逊', '拉塞尔']
    
    • 1

    这时我发现一个一个的添加元素太慢了,于是准备批量添加。

    list.extend(["拉里伯德", "邓肯", "奥尼尔"])
    
    • 1

    相当于在原有的列表后面追加了一个列表的所有元素,合并为一个列表,代码执行结果如下:

    ['乔丹', '詹姆斯', '贾巴尔', '约翰逊', '拉塞尔', '拉里伯德', '邓肯', '奥尼尔']
    
    • 1

    3-2-1 删除

    还是3-1的环境,已有列表如下:

    list = ['乔丹', '詹姆斯', '贾巴尔', '约翰逊', '拉塞尔', '拉里伯德', '邓肯', '奥尼尔']
    
    • 1

    想要删除贾巴尔,在该列表中的索引值是2

    list.pop(2)
    
    • 1

    执行代码的结果:

    ['乔丹', '詹姆斯', '约翰逊', '拉塞尔', '拉里伯德', '邓肯', '奥尼尔']
    
    • 1

    此时还想要删除邓肯

    list.remove("邓肯")
    
    • 1

    最后结果是

    ['乔丹', '詹姆斯', '约翰逊', '拉塞尔', '拉里伯德', '奥尼尔']
    
    • 1

    简单总结:pop()跟索引,remove()跟具体的元素值

    3-2-2 循环删除

    给定数据list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]
    删除所有姓的名字

    错误代码:

    list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]
    for name in list:
        if name.startswith("周"):
            list.remove(name)
    print(list)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    执行结果:['赵本山', '刘德华', '周树人', '赵四']
    可见,批量循环删除,没有完全删除符合条件的元素。

    原因分析如下:

    在这里插入图片描述

    正确代码:

    list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]
    
    # 创建一个临时列表,存储将要删除的元素
    tmp = []
    
    # 遍历列表,得到列表的每一个元素
    for name in list:
    
        # 判断每个名字是否姓周
        if name.startswith("周"):
    
            # 如果姓周,将该名字添加到临时列表中
            tmp.append(name)
    
    # 输出姓周的所有名字的临时列表的内容
    print(tmp)
    
    # 遍历临时列表,得到每个姓周的名字
    for name in tmp:
        
        # 将每个姓周的名字,从原列表中删除
        list.remove(name)
    
    # 输出最终所需要的结果
    print(list)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3-3 修改

    紧跟3-2的数据,初始环境是

    list = ['乔丹', '詹姆斯', '约翰逊', '拉塞尔', '拉里伯德', '奥尼尔']
    
    • 1

    想要将奥尼尔修改成科比,直接通过索引即可

    list[-1] = "科比"
    print(list)
    
    • 1
    • 2

    最后结果是['乔丹', '詹姆斯', '约翰逊', '拉塞尔', '拉里伯德', '科比']

    3-4 查询

    紧跟3-3的数据,['乔丹', '詹姆斯', '约翰逊', '拉塞尔', '拉里伯德', '科比']

    想要查询列表中的数据,也可以直接通过索引操作

    print(list[3])
    
    • 1

    3-5.实例练习

    存在列表list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]
    将列表中姓的姓都改成

    list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]
    
    # 遍历列表中所有名字的索引,用range()和len()表示索引的范围:0-5(不包括6)
    for i in range(len(list)):
        
        # 通过遍历索引,从而得到对应的列表元素,可以一一对应
        name = list[i]
      
        # 判断遍历得到的字符串是否以”周“开头
        if name.startswith("周"):
    
            # 将字符串”张“和得到的姓名中的“名字”部分进行拼接,生成新的字符串
            new_name = "张" + name[1:]
    
            # 输出新的姓名
            print(new_name)
    
            # 将新的姓名赋值给原列表,替换原有的姓“周”的名字
            list[i] = new_name
    
    # 输出最终的列表元素
    print(list)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    执行代码后的结果:

    ['赵本山', '张星驰', '刘德华', '张杰伦', '张树人', '赵四']
    
    • 1

    4.排序

    给出随机排列数值的列表list = [20, 3, 100, 87, 210, 49, 0, 102]
    升序排序操作:(从小到大排序)

    list.sort()
    print(list)
    
    • 1
    • 2

    得到结果[0, 3, 20, 49, 87, 100, 102, 210]
    同理也可以降序排列:

    list.sort(reverse=True)
    print(list)
    
    • 1
    • 2

    得到结果[210, 102, 100, 87, 49, 20, 3, 0]

  • 相关阅读:
    神经网络的基本结构
    硬件工程师日常必备软件推荐
    对比纯软开与嵌入式硬件开发谁更好呢?
    【已解决】Vue项目中Vite以及Webpack代码混淆处理
    【C++】图片转byte
    视觉SLAM基础-李群和李代数
    C++&QT day4
    常见安全设备介绍
    C++ 基于boost.asio封装的日志库,支持输出到文件、控制台和syslog远程日志,支持变长参数的日志输出
    WebDAV之葫芦儿·派盘+PassStore
  • 原文地址:https://blog.csdn.net/oldboy1999/article/details/126656346