上一篇你已经认识了列表。
你知道列表可以装一组有顺序的数据。 也知道可以通过下标,把第几个元素单独取出来。
但如果列表只能“看”,那它其实还不够实用。 真实写程序时,你经常会遇到这些需求:
新来一个学生,要把名字加进去 某个商品下架了,要把它删掉 一个分数录错了,要把它改掉 想看看某个名字在不在列表里 想知道某个元素出现了几次
你会发现,这些操作特别像数据库里最常见的四件事:
增 删 改 查
而列表,恰恰就特别擅长做这些事情。
这一篇,我们就把列表最常见、最实用的操作真正讲透。 你学完以后,列表就不再只是“能装数据”的盒子了。 它会开始真正变成你能随手操作的数据容器。
一、先理解什么叫增删改查
先用最直白的话说。
增,就是往列表里加新元素。 删,就是把列表里的某些元素去掉。 改,就是把某个位置上的旧元素替换成新元素。 查,就是看列表里有什么、某个元素在不在、出现了几次、在哪个位置。
比如一个学生名单:
students = ['小明', '小红', '小刚']
新增一个学生,就是把 小丽 加进去。 删除一个学生,就是把 小刚 去掉。 修改一个名字,就是把 小红 改成 小美。 查询,就是看 小明 在不在、名单有几个人、某个名字在哪个位置。
所以你现在可以先把这篇文章理解成:
学会怎么真正“操作”列表。
二、先从新增开始:append()
列表新增元素时,最常见的一个方法就是:
append()
它的作用是:
把一个元素追加到列表最后面。
来看例子:
students = ['小明', '小红', '小刚']students.append('小丽')print(students)
输出结果会是:
['小明', '小红', '小刚', '小丽']
你可以看到,小丽 被加到了列表最后面。
所以 append() 的特点特别明确:
在尾部新增 一次加一个元素
这也是它为什么特别常用。 因为现实里很多新增操作,本来就是“加到最后”。
三、append() 是现在最值得先练熟的新增方式
比如商品列表:
products = ['鼠标', '键盘', '耳机']products.append('显示器')print(products)
再比如成绩列表:
scores = [88, 92, 75]scores.append(99)print(scores)
再比如城市列表:
cities = ['北京', '上海']cities.append('广州')print(cities)
你会发现,写法都特别统一。
这也是为什么我说,列表新增里你最先要练熟的,就是 append()。 因为它简单、直观、出现频率非常高。
四、自己动手做一个 append 练习
下面这段代码你最好现在就敲一遍。
fruits = ['苹果', '香蕉', '橙子']fruits.append('葡萄')print(fruits)
然后你自己再改一下。
先追加一个水果:
fruits.append('西瓜')
再追加一个水果:
fruits.append('草莓')
完整一点可以写成:
fruits = ['苹果', '香蕉', '橙子']fruits.append('葡萄')fruits.append('西瓜')fruits.append('草莓')print(fruits)
这个练习特别有用, 因为它会让你很直观地看到:
列表不是固定死的 它是真的可以不断往后加内容
五、如果我不想加在最后,而是想插到中间,怎么办
这时候就要用另一个方法:
insert()
它的作用是:
在指定位置插入一个元素。
基本写法是:
列表名.insert(位置, 元素)
比如:
students = ['小明', '小红', '小刚']students.insert(1, '小丽')print(students)
输出结果会是:
['小明', '小丽', '小红', '小刚']
你可以看到,小丽 被插进了下标 1 的位置。 原来后面的元素都顺着往后挪了。
所以 insert() 的特点是:
指定位置新增 不是只能加在最后
六、append() 和 insert() 的区别,一定要分清
这个区别非常实用。
append() 是:
加到最后
比如:
students.append('小丽')
insert() 是:
加到指定位置
比如:
students.insert(1, '小丽')
所以以后你遇到新增操作时,可以先问自己一句:
我是只想加到最后 还是要放到某个指定位置
如果只是尾部追加,append() 最自然。 如果必须插到中间,insert() 更合适。
七、再认识一个批量新增:extend()
如果你想一次加多个元素, 还可以用:
extend()
它的作用是:
把另一组元素追加到当前列表末尾。
比如:
students = ['小明', '小红']new_students = ['小刚', '小丽']students.extend(new_students)print(students)
输出结果:
['小明', '小红', '小刚', '小丽']
这个方法特别适合“合并两组数据”。
比如两组商品名单、两组姓名、两组分数。 只要你想把一整组元素接到后面,extend() 就很合适。
对当前阶段来说,你先至少记住这三个新增方法:
append()加一个到最后
insert()加一个到指定位置
extend()加一整组到最后
八、接下来讲删除:remove()
删除列表元素时,最常见的一个方法是:
remove()
它的作用是:
按元素的值删除。
来看例子:
students = ['小明', '小红', '小刚']students.remove('小红')print(students)
输出结果会是:
['小明', '小刚']
这里不是按位置删, 而是根据值删掉了 '小红'。
所以 remove() 特别适合这种场景:
我知道要删谁 但我不一定关心它具体下标是多少
九、remove() 有一个特别重要的特点
它删除的是“第一个匹配到的值”。
比如:
names = ['小明', '小红', '小明', '小刚']names.remove('小明')print(names)
输出会是:
['小红', '小明', '小刚']
你会发现,它只删掉了前面那个 小明。 后面的同名元素还在。
所以以后你要记住:
remove() 删除的是第一个匹配项 不是把所有同名元素一次删光
这个细节很重要。
十、按位置删除:pop()
有时候你不是知道“删谁”, 而是知道“删第几个”。
这时候很适合用:
pop()
它的作用是:
按下标删除元素。
比如:
students = ['小明', '小红', '小刚']students.pop(1)print(students)
输出:
['小明', '小刚']
因为下标 1 的元素就是 小红。
所以:
remove() 更像是按值删pop() 更像是按位置删
这个区别一定要分清。
十一、pop() 还有一个特别实用的地方
如果你不写下标,它默认删除最后一个元素。
比如:
students = ['小明', '小红', '小刚']students.pop()print(students)
输出会是:
['小明', '小红']
也就是说,它把最后一个 小刚 删掉了。
所以 pop() 很适合这种场景:
删最后一个 或者删某个已知下标位置的元素
这在很多程序里都很常见。
十二、del 也能删,而且很直接
除了方法以外,Python 还有一个关键字:
del
它也能删除列表里的某个位置。
比如:
students = ['小明', '小红', '小刚']del students[1]print(students)
输出:
['小明', '小刚']
效果和 pop(1) 有点像。
对当前阶段来说,你可以先这样理解:
del 列表[下标]也能按位置删
所以现在删除列表,你已经有几种方式了:
remove(值)按值删
pop(下标)按位置删
pop()删最后一个
del 列表[下标]也是按位置删
十三、清空整个列表:clear()
如果你想把列表里的所有元素一次清空, 可以用:
clear()
比如:
students = ['小明', '小红', '小刚']students.clear()print(students)
输出结果:
[]
也就是空列表。
这个方法特别适合“全部删掉重新来”的场景。 比如购物车清空、临时数据重置、缓存列表重置等。
十四、删除部分现在先记一个思路就够了
当前阶段你不用死记所有删除方式的细微差别, 但至少要形成下面这个感觉:
知道值,用 remove()知道位置,用 pop() 或 del想删最后一个,用 pop()想全清空,用 clear()
这个框架你先记住, 后面越写越多,自然会更熟。
十五、接下来讲修改:直接通过下标赋值
列表元素不是固定死的。 你完全可以把某个位置上的旧值换成新值。
最直接的写法就是:
列表名[下标] = 新值
比如:
students = ['小明', '小红', '小刚']students[1] = '小美'print(students)
输出结果会是:
['小明', '小美', '小刚']
这里原来下标 1 的元素是 小红, 现在被改成了 小美。
这就是列表修改最基础、最重要的方式。
十六、修改操作特别像“定位到某个格子,再把内容替换掉”
你可以把列表想成一个有很多格子的收纳盒。
比如:
scores = [88, 92, 75]
下标 0 放 88 下标 1 放 92 下标 2 放 75
如果现在分数录错了, 想把第二个分数改成 95:
scores[1] = 95print(scores)
输出:
[88, 95, 75]
这就是“修改”的本质。
不是新增 不是删除 而是原位置不变,内容换掉
十七、自己动手做一个修改练习
下面这个练习特别适合现在做。
cities = ['北京', '上海', '广州']cities[2] = '深圳'print(cities)
输出:
['北京', '上海', '深圳']
然后你自己再试一个:
cities[0] = '杭州'print(cities)
这样你会更明显地感受到:
列表里的元素不是不可变的 它是可以按位置直接改掉的
十八、接下来讲查询:最常见的是看某个元素在不在
比如你有一个学生名单:
students = ['小明', '小红', '小刚']
现在你想知道:
小红 在不在
最简单的方法就是:
print('小红'in students)
输出:
True
如果判断一个不存在的人:
print('小丽'in students)
输出:
False
这就是最基础的查询方式之一。
你也可以配合 if 一起写:
if'小红'in students: print('名单里有小红')
这在真实程序里非常常见。
十九、查询某个元素出现了几次:count()
比如:
names = ['小明', '小红', '小明', '小刚']print(names.count('小明'))
输出结果会是:
2
也就是说,小明 一共出现了 2 次。
这个方法特别适合做简单统计。
比如:
某商品在购物车里出现了几次 某个名字在名单里重复了几次 某个分数在列表里有几个
它的用法很直观,也很好记。
二十、查询某个元素第一次出现的位置:index()
如果你不只是想知道在不在, 还想知道它第一次出现在哪个位置, 可以用:
index()
比如:
students = ['小明', '小红', '小刚']print(students.index('小红'))
输出结果:
1
因为 小红 第一次出现的位置就是下标 1。
如果列表里有重复值,比如:
names = ['小明', '小红', '小明', '小刚']print(names.index('小明'))
结果会是:
0
因为 index() 返回的是第一次出现的位置。
二十一、查询时别忘了 len() 也特别常用
虽然严格说,len() 不只是列表专用。 但查询列表时,它非常高频。
它的作用是:
看列表里一共有多少个元素。
比如:
students = ['小明', '小红', '小刚']print(len(students))
输出结果是:
3
这个功能在很多程序里都会用到。
比如:
统计人数 统计商品数量 判断列表是不是空 做编号输出
所以到现在为止,列表查询阶段,你至少要先熟这几个:
in看在不在
count()看出现几次
index()看第一次出现的位置
len()看一共有几个元素
二十二、把增删改查放在一起看一遍
来看一个非常典型的完整练习:
students = ['小明', '小红', '小刚']students.append('小丽')print('新增后:', students)students.remove('小红')print('删除后:', students)students[1] = '小强'print('修改后:', students)print('小明在不在:', '小明'in students)print('列表长度:', len(students))
这个例子非常有代表性。 因为它已经把一轮最常见的列表操作全串起来了。
你跑一遍以后,会特别有感觉:
列表不是静态数据 它是真的会随着程序运行不断变化
二十三、列表的增删改查,特别适合配合流程控制一起用
比如:
如果名单里没有某人,就新增进去:
students = ['小明', '小红']if'小刚'notin students: students.append('小刚')print(students)
如果某商品存在,就删除它:
products = ['鼠标', '键盘', '耳机']if'键盘'in products: products.remove('键盘')print(products)
如果第一个分数低于 60,就改成 60:
scores = [55, 88, 92]if scores[0] < 60: scores[0] = 60print(scores)
你会发现, 一旦列表操作和 if 结合起来,程序就开始有“业务逻辑”的感觉了。
二十四、新手最容易犯的几个列表增删改查错误
第一个错误,把 append() 和 insert() 混了。
一个是加到最后, 一个是加到指定位置。
第二个错误,用 remove() 时以为会删掉所有同名元素。
不是。 它默认只删第一个匹配项。
第三个错误,用下标修改时,把第一个元素写成下标 1。
一定记住: 第一个元素是下标 0。
第四个错误,取不存在的位置,或者删不存在的位置,导致报错。
这通常说明你没有先搞清楚列表有几个元素。
第五个错误,只会整体打印列表,不会查、不敢改。
这一点一定要尽早突破。 列表真正的价值,不在于“看见它”,而在于“操作它”。
二十五、今天一定要亲手完成的 5 个练习
第一个,新增练习。
fruits = ['苹果', '香蕉']fruits.append('橙子')print(fruits)
第二个,删除练习。
students = ['小明', '小红', '小刚']students.remove('小红')print(students)
第三个,修改练习。
scores = [88, 92, 75]scores[2] = 80print(scores)
第四个,查询练习。
cities = ['北京', '上海', '广州']print('上海'in cities)print(cities.index('广州'))print(len(cities))
第五个,综合练习。
products = ['鼠标', '键盘']products.append('耳机')products[0] = '无线鼠标'if'键盘'in products: products.remove('键盘')print(products)
这 5 个练习特别适合当前阶段, 因为它们把最常见的增删改查都覆盖到了。
二十六、再做一个更像样的小案例
下面这个案例很适合拿来做今天的收尾。
需求:
准备一个购物车列表。 先添加商品,再删除一个商品,再修改一个商品名称,最后查询某个商品是否存在,并输出购物车总数量。
代码如下:
cart = ['鼠标', '键盘', '耳机']cart.append('显示器')print('添加商品后:', cart)cart.remove('键盘')print('删除商品后:', cart)cart[0] = '无线鼠标'print('修改商品后:', cart)print('耳机是否存在:', '耳机'in cart)print('购物车商品总数:', len(cart))
这个案例虽然不大, 但已经非常像真实程序里的数据处理过程了。
你跑完以后,还可以自己升级一下:
再加一个商品 再删除最后一个 再判断某个不存在的商品 再统计列表长度
只要你自己愿意多改两步, 这一章就会掌握得很扎实。
二十七、写在最后
列表这一部分,真正的关键转变是:
你不再只是“看一个列表”, 而是开始“操作一个列表”。
这一步特别重要。
因为现实里的数据,几乎从来都不是固定死在那里等你看。 它们会新增、会删除、会修改、会被查询。 程序真正有价值的地方,恰恰就是帮你处理这些变化。
所以这篇文章里你学的,不只是几个方法名。 你学的是:
怎么让一组数据跟着程序逻辑真正动起来
这对后面学切片、遍历统计、排序、字典、集合,都会有直接帮助。
本文小结
列表的增删改查,是写程序时最常见的一组操作。 新增常用 append()、insert()、extend()。 删除常用 remove()、pop()、del、clear()。 修改最常见的方式是通过下标直接赋值。 查询常用 in、count()、index()、len()。 学习列表最重要的,不只是认识方法,而是知道什么时候该新增、什么时候该删除、什么时候该修改、什么时候该查询。
下篇预告
第 33 篇,我们继续把列表真正用深一点。
列表切片:一行代码处理一段数据
到那一篇,你会发现:列表不只是能取一个元素,还能一次取出一整段数据。