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

本文详细讲解了列表的基本概念、索引和切片、遍历、长度获取、嵌套、增删改查方法,以及如何对列表进行排序。实例演示了如何修改、查询和批量操作,以及如何使用sort()和reverse()函数实现列表的升序和降序排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列表

1.定义和表示

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

2.特性

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

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

执行代码结果如下:

在这里插入图片描述

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

在这里插入图片描述

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

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

存在一个嵌套的列表

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

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

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

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

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

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

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

3.增删改查

3-1 添加

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

list = []

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

list.append("詹姆斯")
list.append("贾巴尔")
list.append("拉塞尔")

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

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

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

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

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

list.insert(0, "乔丹")

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

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

同理:

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

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

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

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

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

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

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

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

3-2-1 删除

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

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

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

list.pop(2)

执行代码的结果:

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

此时还想要删除邓肯

list.remove("邓肯")

最后结果是

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

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

3-2-2 循环删除

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

错误代码:

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

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

原因分析如下:

在这里插入图片描述

正确代码:

list = ["赵本山","周星驰","刘德华","周杰伦","周树人","赵四"]

# 创建一个临时列表,存储将要删除的元素
tmp = []

# 遍历列表,得到列表的每一个元素
for name in list:

    # 判断每个名字是否姓周
    if name.startswith("周"):

        # 如果姓周,将该名字添加到临时列表中
        tmp.append(name)

# 输出姓周的所有名字的临时列表的内容
print(tmp)

# 遍历临时列表,得到每个姓周的名字
for name in tmp:
    
    # 将每个姓周的名字,从原列表中删除
    list.remove(name)

# 输出最终所需要的结果
print(list)

3-3 修改

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

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

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

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

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

3-4 查询

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

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

print(list[3])

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)

执行代码后的结果:

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

4.排序

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

list.sort()
print(list)

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

list.sort(reverse=True)
print(list)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值