Python列表的遍历与操作
困难4列表的遍历与操作:像整理书包一样管理数据
你有没有过这样的经历:新学期发了一大堆新书,你需要一本一本放进书包,或者偶尔要把某本旧书拿出来?在Python里,列表就像你的书包,里面可以装很多数据(数字、文字、甚至其他列表)。而遍历就是把书包里的东西一个一个拿出来看看,操作则是对里面的东西进行添加、删除、排序等整理工作。
下面我们一步步学习如何用Python让列表数据听你的话。
1. 遍历列表:挨个点名,一个不落
当列表里有多个元素时,我们常常需要“从头到尾”访问每个元素,这叫遍历。就像老师上课点名:念到谁,谁就站起来。Python里最常用的遍历工具是 for 循环。
比如你有一份水果列表,想给每种水果都加一句“今天吃:”:
fruits = ["苹果", "香蕉", "橘子", "葡萄"] # 一个水果列表
for fruit in fruits: # fruit依次等于每个水果
print("今天吃:", fruit) # 打印出来
运行结果:
今天吃: 苹果
今天吃: 香蕉
今天吃: 橘子
今天吃: 葡萄
怎么理解这个循环?
for fruit in fruits 可以读作“对于列表 fruits 里的每一个元素,把它暂存在变量 fruit 中,然后执行下面的操作”。循环会自动从头到尾取一遍,直到最后一个元素。
生活中的例子:
你有一包零食(列表 = ["薯片", "巧克力", "饼干"]),你要把每种零食吃一口(遍历),就可以写:
snacks = ["薯片", "巧克力", "饼干"]
for snack in snacks:
print("我吃了一块", snack)
输出:
我吃了一块 薯片
我吃了一块 巧克力
我吃了一块 饼干
小提示:如果同时需要知道当前是第几个元素(索引),可以用
enumerate:fruits = ["苹果", "香蕉", "橘子"] for index, fruit in enumerate(fruits): print("第", index+1, "个水果是", fruit)
2. 添加元素:书包里再加一本书
(1)加在末尾:append()
像排队时新人站到队伍最后面一样,append() 可以把新元素添加到列表的末尾。
fruits = ["苹果", "香蕉", "橘子"] # 原来的列表
fruits.append("西瓜") # 把“西瓜”添加到末尾
print(fruits) # 输出:['苹果', '香蕉', '橘子', '西瓜']
(2)插到中间:insert()
如果想插队到某个位置,用 insert(位置, 元素)。位置从0开始计数(0表示第一个)。
fruits.insert(1, "草莓") # 在索引1(第二个位置)插入“草莓”
print(fruits) # 输出:['苹果', '草莓', '香蕉', '橘子', '西瓜']
生活中的例子:
你有一张购物清单 = ["牛奶", "面包"],后来想起还要买鸡蛋(加到末尾),以及妈妈让你在牛奶后面加上酸奶(插入位置1)。
shopping_list = ["牛奶", "面包"]
shopping_list.append("鸡蛋")
shopping_list.insert(1, "酸奶")
print(shopping_list) # ['牛奶', '酸奶', '面包', '鸡蛋']
3. 删除元素:把不用的丢掉
(1)按内容删除:remove()
如果你知道要删掉的具体内容(比如“香蕉”),用 remove():它会删掉第一次出现的该元素。
fruits = ["苹果", "香蕉", "橘子", "香蕉"] # 有两个“香蕉”
fruits.remove("香蕉") # 删除第一个“香蕉”
print(fruits) # 输出:['苹果', '橘子', '香蕉']
注意:如果列表里没有这个元素,程序会报错。所以删除前最好先判断一下。
(2)按位置删除:pop()
如果你知道想删掉第几个元素(比如第0个),用 pop(索引)。不写索引时默认删除最后一个。
fruits = ["苹果", "香蕉", "橘子"]
removed_item = fruits.pop(1) # 删除索引1(第二个)的“香蕉”,并且可以拿到它
print(fruits) # 输出:['苹果', '橘子']
print("被删除的是:", removed_item) # 输出:被删除的是: 香蕉
(3)清空列表:clear()
想一次性清空所有内容,用 fruits.clear()。
生活中的例子:
你有一堆零花钱硬币放在存钱罐里(列表 = [1, 5, 1, 10]),你花掉了第一个1元硬币(用 pop(0)),又发现5元硬币是假币(用 remove(5))。
4. 排序:按大小整理好
(1)原地排序:sort()
直接修改原列表,默认从小到大(数字)或按字母顺序(字符串)。
scores = [88, 72, 95, 60] # 考试成绩
scores.sort() # 从小到大排序
print(scores) # 输出:[60, 72, 88, 95]
如果想从大到小,加个参数 reverse=True:
scores.sort(reverse=True) # 从大到小
print(scores) # 输出:[95, 88, 72, 60]
(2)不改变原列表:sorted()
有时你需要保留原来的顺序,只想要一份排好序的新列表,用 sorted()。
numbers = [5, 2, 8, 1, 9]
sorted_numbers = sorted(numbers) # 得到新列表,原列表不变
print(numbers) # 输出:[5, 2, 8, 1, 9]
print(sorted_numbers) # 输出:[1, 2, 5, 8, 9]
生活中的例子:
老师在登记班级身高(列表 = [150, 162, 148, 155]),排座位时想按从矮到高排列(sort()),但原始点名册不想变(用 sorted() 得到新列表用于排座位)。
5. 其他常用操作
-
获取长度:
len(列表)告诉你列表里有多少个元素。fruits = ["苹果", "香蕉", "橘子"] print(len(fruits)) # 输出 3 -
判断是否包含:
元素 in 列表返回True或False。if "香蕉" in fruits: print("有香蕉!") -
复制列表:不要直接写
new_list = old_list,那样只是起了个别名。要用new_list = old_list.copy()或new_list = old_list[:]。
6. 新手常犯的错误
-
在遍历列表时删除元素
比如边遍历边remove,会导致漏掉元素或索引错乱。正确做法是:先记下要删的,遍历完再删,或者用列表推导式。# 错误示例:代码没有按预期删除所有“香蕉” fruits = ["苹果", "香蕉", "橘子", "香蕉"] for fruit in fruits: if fruit == "香蕉": fruits.remove("香蕉") # 容易出问题 -
忘记索引从0开始
fruits[0]是第一个元素,fruits[1]是第二个。初学者常以为第一个的索引是1。 -
remove()只删除第一个匹配项
如果列表有多个相同的值,remove只删第一个。想删全部要用循环或列表推导式。 -
sort()和sorted()混淆
sort()会改变原列表,sorted()返回新列表。如果不想丢失原数据,用sorted()。
7. 完整示例:管理你的零食清单
下面这个程序模拟了一个零食库存管理,包含添加、删除、排序和遍历功能。
# 初始零食列表
snacks = ["薯片", "巧克力", "饼干", "牛奶糖"] # 零食清单
# 遍历显示所有零食
print("---- 当前零食列表 ----")
for snack in snacks:
print("- " + snack)
# 添加新零食
snacks.append("果冻") # 在末尾加果冻
snacks.insert(2, "棉花糖") # 在第三个位置插入棉花糖
print("\n添加后:", snacks)
# 删除一个零食(按内容)
if "巧克力" in snacks: # 先判断防止报错
snacks.remove("巧克力") # 删除巧克力
print("删除巧克力后:", snacks)
# 按长度排序(从短到长)
snacks.sort(key=len) # 按名字长度排序
print("按名字长度排序:", snacks)
# 输出最终列表和总数
print("\n最终一共有", len(snacks), "种零食。")
print("最后一种零食是:", snacks[-1]) # 访问最后一个元素
运行结果类似:
---- 当前零食列表 ----
- 薯片
- 巧克力
- 饼干
- 牛奶糖
添加后: ['薯片', '巧克力', '棉花糖', '饼干', '牛奶糖', '果冻']
删除巧克力后: ['薯片', '棉花糖', '饼干', '牛奶糖', '果冻']
按名字长度排序: ['薯片', '饼干', '果冻', '棉花糖', '牛奶糖']
最终一共有 5 种零食。
最后一种零食是: 牛奶糖
8. 相关知识点指引
- 循环与条件判断:遍历时如何只对满足条件的元素操作?结合
if语句。 - 字符串与列表的转换:
"a,b,c".split(",")可以把一个字符串拆成列表," ".join(list)可以把列表合成字符串。 - 列表推导式:一行代码生成新的列表,比如
[x*2 for x in numbers],让代码更简洁。 - 元组与字典:列表的东西可以修改,元组不能修改;字典用键值对存储数据,适合更复杂的结构。
练习建议:把自己喜欢的游戏角色、考试成绩、零花钱金额用列表存起来,试着做遍历、排序、添加删除等操作。多敲代码,列表就是你最好的数据朋友!
例题精讲
执行以下代码后,列表lst的值是什么?\nlst = [1, 2, 3, 4]\nfor x in lst:\n x = x * 2\nprint(lst)
在遍历列表时,如果要删除列表中的某些元素,使用for循环直接删除可能会导致遗漏或索引错误。
请补全代码,使用for循环遍历列表numbers,计算列表中所有偶数的和。\nnumbers = [12, 7, 9, 24, 15, 18]\ntotal = 0\nfor num in numbers:\n if ___ :\n total += num\nprint(total)下列哪段代码可以正确地将列表scores中所有元素的值加10?
请补全代码,使用while循环遍历列表nums,找出最大值并打印。\nnums = [23, 45, 12, 67, 34, 89]\nmax_val = nums[0]\ni = 1\nwhile i < ___ :\n if nums[i] > max_val:\n max_val = nums[i]\n i += 1\nprint(\"最大值:\", max_val)