《Python编程:从入门到实践》第4章 操作列表

目录

4.1 遍历整个列表

4.1.1 深入研究循环

4.1.2 在for 循环中执行更多操作

 4.1.3 在for 循环结束后执行一些操作

4.2 避免缩进错误

4.2.1 忘记缩进

4.2.2 忘记缩进额外的代码行

4.2.3 不必要的缩进

4.2.4 循环后不必要的缩进

4.2.5 遗漏了冒号

4.2.6 练习

练习4-1:比萨

练习4-2:动物

4.3 创建数值列表

4.3.1 使用函数range()

 4.3.2 使用range() 创建数字列表

4.3.3 对数字列表执行简单的统计计算

4.3.4 列表解析

4.3.5 练习

练习4-3:数到20

练习4-4:一百万

练习4-5:一百万求和

练习4-6:奇数

练习4-7:3的倍数

练习4-8:立方

练习4-9:立方解析

4.4 使用列表的一部分

4.4.1 切片

 4.4.2 遍历切片

4.4.3 复制列表

 4.4.4 练习

练习4-10:切片

练习4-11:你的比萨,我的比萨

练习4-12:使用多个循环

4.5 元组

4.5.1 定义元组

 4.5.2 遍历元组中的所有值

4.5.3 修改元组变量

4.5.4 练习

练习4-13:自助餐


4.1 遍历整个列表

你经常需要遍历列表的所有元素,对每个元素执行相同的操作。例如,在游戏中,
可能需要将每个界面元素平移相同的距离;对于包含数字的列表,可能需要对每个
元素执行相同的统计运算;在网站中,可能需要显示文章列表中的每个标题。需要
对列表中的每个元素都执行相同的操作时,可使用Python中的 for 循环。
假设我们有一个魔术师名单,需要将其中每个魔术师的名字都打印出来。为此,可
以分别获取名单中的每个名字,但这种做法会导致多个问题。例如,如果名单很
长,将包含大量重复的代码。另外,每当名单的长度发生变化时,都必须修改代
码。通过使用 for 循环,可以让Python去处理这些问题。
下面使用 for 循环来打印魔术师名单中的所有名字:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician)
你可以这样解读这些代码:对于列表 magicians 中的每位魔术师,都将其名字打印出来。
输出很简单,就是列表中所有的名字:
alice
david
carolina

4.1.1 深入研究循环

循环这种概念很重要,因为它是让计算机自动完成重复工作的常见方式之一。例如,在前面magicians.py中使用的简单循环里,Python将首先读取其中的第一行代码:
for magician in magicians:
这行代码让Python获取列表 magicians 中的第一个值 'alice' ,并将其与变量magician 相关联。接下来,Python读取下一行代码:
    print(magician)
它让Python打印 magician 的值,依然是 'alice' 。鉴于该列表还包含其他值,Python返回到循环的第一行:
for magician in magicians:
Python获取列表中的下一个名字'david',并将其与变量magician相关联,再执行下面这行代码:
    print(magician)
Python再次打印变量 magician 的值,当前为 'david' 。接下来,Python再次执行整个循环,对列表中的最后一个值 'carolina' 进行处理。至此,列表中没有其他的值了,因此Python接着执行程序的下一行代码。在这个示例中, for 循环后面没有其他代码,因此程序就此结束。
刚开始使用循环时请牢记,对列表中的每个元素,都将执行循环指定的步骤,而不管列表包含多少个元素。如果列表包含一百万个元素,Python就重复执行指定的步骤一百万次,且通常速度非常快。
另外,编写for 循环时,可以给依次与列表中每个值相关联的临时变量指定任意名称。然而,选择描述单个列表元素的有意义名称大有裨益。例如,对于小猫列表、小狗列表和一般性列表,像下面这样编写 for 循环的第一行代码是不错的选择:
for cat in cats:
for dog in dogs:
for item in list_of_items:
这些命名约定有助于你明白 for 循环中将对每个元素执行的操作。使用单数和复数式名称,可帮助你判断代码段处理的是单个列表元素还是整个列表。

4.1.2 在for 循环中执行更多操作

for 循环中,可对每个元素执行任何操作。下面来扩展前面的示例,对于每位魔术师,都打印一条消息,指出他的表演太精彩了。
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print((f"{magician.title()}, that was a great trick!"))
相比于前一个示例,唯一的不同是为每位魔术师打印了一条以其名字为抬头的消息 。这个循环第一次迭代时,变量 magician 的值为 'alice' ,因此Python打印的第一条消息的抬头为 'Alice' ;第二次迭代时,消息的抬头为 'David' ;第三次迭代时,抬头为 'Carolina'
for 循环中,想包含多少行代码都可以。在代码行for magician in magicians 后面,每个缩进的代码行都是循环的一部分,将针对列表中的每个值都执行一次。因此,可对列表中的每个值执行任意次数的操作。
下面再添加一行代码,告诉每位魔术师,我们期待他的下一次表演:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print((f"{magician.title()}, that was a great trick!"))
    print(f"I can't wait to see your next trick, {magician.title()}.\n")
两个函数调用 print() 都缩进了,因此它们都将针对列表中的每位魔术师执行一次。第二个函数调用 print() 中的换行符 "\n" 在每次迭代结束后都插入一个空行,从而整洁地将针对各位魔术师的消息编组。
for 循环中,想包含多少行代码都可以。

 4.1.3 在for 循环结束后执行一些操作

for 循环结束后怎么办呢?通常,你需要提供总结性输出或接着执行程序必须完成的其他任务。

在for 循环后面,没有缩进的代码都只执行一次,不会重复执行。下面来打印一条向全体魔术师致谢的消息,感谢他们的精彩表演。想要在打印给各位魔术师的消息后面打印一条给全体魔术师的致谢消息,需要将相应的代码放在 for 循环后面,且不缩进:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print((f"{magician.title()}, that was a great trick!"))
    print(f"I can't wait to see your next trick, {magician.title()}.\n")

print("Thank you, everyone. That was a great magic show!")
你在前面看到了,开头两个函数调用 print() 针对列表中的每位魔术师重复执行。然而,第三个函数调用 print() 没有缩进 ,因此只执行一次。
使用 for 循环处理数据是一种对数据集执行整体操作的不错方式。例如,你可能使用 for 循环来初始化游戏:遍历角色列表,将每个角色显示到屏幕上。然后在循环后面添加一个不缩进的代码块,在屏幕上绘制所有角色后显示一个Play Now按钮。

4.2 避免缩进错误

Python根据缩进来判断代码行与前一个代码行的关系。在前面的示例中,向各位魔术师显示消息的代码行是for 循环的一部分,因为它们缩进了。Python通过使用缩进让代码更易读。简单地说,它要求你使用缩进让代码整洁而结构清晰。在较长的Python程序中,你将看到缩进程度各不相同的代码块,从而对程序的组织结构有大致的认识。

4.2.1 忘记缩进

4.2.2 忘记缩进额外的代码行

4.2.3 不必要的缩进

4.2.4 循环后不必要的缩进

4.2.5 遗漏了冒号

for 语句末尾的冒号告诉Python,下一行是循环的第一行。

4.2.6 练习

练习4-1:比萨

想出至少三种你喜欢的比萨,将其名称存储在一个列表中,再使用 for 循环将每种比萨的名称打印出来。
修改这个 for 循环,使其打印包含比萨名称的句子,而不仅仅是比萨的名称。对于每种比萨,都显示一行输出,下面是一个例子。
I like pepperoni pizza.
在程序末尾添加一行代码,它不在 for 循环中,指出你有多喜欢比萨。输出应包含针对每种比萨的消息,还有一个总结性句子,下面是一个例子。
I really love pizza!
pizzas = ['seafood', 'sausage', 'cheese']
for pizza in pizzas:
    print(f"I like {pizza} pizza")
print("I really like pizza!")

练习4-2:动物

想出至少三种有共同特征的动物,将其名称存储在一个列表 中,再使用 for 循环将每种动物的名称打印出来。
修改这个程序,使其针对每种动物都打印一个句子,下面是一个例子。
A dog would make a great pet.
在程序末尾添加一行代码,指出这些动物的共同之处,如打印下面这样的句子。
Any of these animals would make a great pet!
animals = ['dog', 'cat', 'rabbit']
for animal in animals:
    print(f"A {animal} would make a great pet")
print("Any of these animals would make a great pet!")

4.3 创建数值列表

列表非常适合用于存储数字集合,而Python提供了很多工具,可帮助你高效地处理数字列表。明白如何有效地使用这些工具后,即便列表包含数百万个元素,你编写的代码也能运行得很好。

4.3.1 使用函数range()

Python函数 range() 让你能够轻松地生成一系列数。例如,可以像下面这样使用函数 range() 来打印一系列数:
for value in range(1, 5):
    print(value)
上述代码好像应该打印数1~5,但实际上不会打印5:
1
2
3
4
在这个示例中, range() 只打印数1~4。这是编程语言中常见的差一行为的结果。函数 range() 让Python从指定的第一个值开始数,并在到达你指定的第二个值时停止。因为它在第二个值处停止,所以输出不包含该值(这里为5)。
要打印数1~5,需要使用 range(1,6)
for value in range(1, 6):
    print(value)
调用函数 range() 时,也可只指定一个参数,这样它将从0开始。例如,
range(6) 返回数0~5。

 4.3.2 使用range() 创建数字列表

要创建数字列表,可使用函数 list() range() 的结果直接转换为列表。如果将range() 作为 list() 的参数,输出将是一个数字列表。
在前一节的示例中,只是将一系列数打印出来。要将这组数转换为列表,可使用list()
numbers = list(range(1, 6))
print(numbers)
结果如下:
[1, 2, 3, 4, 5]
使用函数 range() 时,还可指定步长。为此,可给这个函数指定第三个参数,Python将根据这个步长来生成数。
例如,下面的代码打印1~10的偶数:
even_numbers = list(range(2, 11, 2))
print(even_numbers)
在这个示例中,函数 range() 从2开始数,然后不断加2,直到达到或超过终值(11),因此输出如下:
[2, 4, 6, 8, 10]
使用函数 range() 几乎能够创建任何需要的数集。例如,如何创建一个列表,其中包含前10个整数(1~10)的平方呢?在Python中,用两个星号( ** )表示乘方运算。下面的代码演示了如何将前10个整数的平方加入一个列表中:
squares = []
for value in range(1, 11):
    square = value ** 2
    squares.append(square)

print(squares)
首先,创建一个名为 squares 的空列表 。接下来,使用函数 range() 让Python遍历1~10的值。在循环中,计算当前值的平方,并将结果赋给变量square 。然后,将新计算得到的平方值附加到列表 squares 末尾。最后,循环结束后,打印列表 squares
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

4.3.3 对数字列表执行简单的统计计算

有几个专门用于处理数字列表的Python函数。例如,你可以轻松地找出数字列表的最大值、最小值和总和:
>>> digits = [1,2,3,4,5,6,7,8,9,0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45

4.3.4 列表解析

前面介绍的生成列表 squares 的方式包含三四行代码,而列表解析让你只需编写一行代码就能生成这样的列表。 列表解析 for 循环和创建新元素的代码合并成一行,并自动附加新元素。
下面的示例使用列表解析创建你在前面看到的平方数列表: 
squares = [value**2 for value in range(1, 11)]
print(squares)
要使用这种语法,首先指定一个描述性的列表名,如squares 。然后,指定一个左方括号,并定义一个表达式,用于生成要存储到列表中的值。在这个示例中,表达式为 value**2 ,它计算平方值。接下来,编写一个 for 循环,用于给表达式提供值,再加上右方括号。在这个示例中, for 循环为for value in range(1,11),它将值1~10提供给表达式 value**2 。请注意,这里的 for 语句末尾没有冒
号。

4.3.5 练习

练习4-3:数到20

使用一个 for 循环打印数1~20(含)。
numbers = [value for value in range(1, 21)]
for number in numbers:
    print(number)

练习4-4:一百万

创建一个包含数1~1 000 000的列表,再使用一个for 循环将这些数打印出来。(如果输出的时间太长,按Ctrl + C停止输出或关闭输出窗口。)
numbers = [value for value in range(1, 1000001)]
for number in numbers:
    print(number)

练习4-5:一百万求和

创建一个包含数1~1 000 000的列表,再使用min()和 max() 核实该列表确实是从1开始、到1 000 000结束的。另外,对这个列表 调用函数 sum() ,看看Python将一百万个数相加需要多长时间。
numbers = [value for value in range(1, 1000001)]
print(min(numbers))
print(max(numbers))
print(sum(numbers))

练习4-6:奇数

通过给函数 range() 指定第三个参数来创建一个列表,其中包含1~20的奇数,再使用一个 for 循环将这些数打印出来。
numbers = [value for value in range(1, 20, 2)]
print(numbers)

练习4-7:3的倍数

创建一个列表,其中包含3~30能被3整除的数,再使用一
for 循环将这个列表中的数打印出来。
numbers = []
for value in range(1, 11):
    numbers.append(value*3)

for number in numbers:
    print(number)

练习4-8:立方

将同一个数乘三次称为 立方 。例如,在Python中,2的立方用 2**3 表示。请创建一个列表,其中包含前10个整数(1~10)的立方,再使用一个 for 循环将这些立方数打印出来。
numbers = []
for value in range(1, 11):
    numbers.append(value**3)

for number in numbers:
    print(number)

练习4-9:立方解析

使用列表解析生成一个列表,其中包含前10个整数的立方。
numbers = [value**3 for value in range(1, 11)]
print(numbers)

4.4 使用列表的一部分

在第3章中,你学习了如何访问单个列表元素。在本章中,你一直在学习如何处理列表的所有元素。你还可以处理列表的部分元素,Python称之为 切片

4.4.1 切片

要创建切片,可指定要使用的第一个元素和最后一个元素的索引。与函数range()一样,Python在到达第二个索引之前的元素后停止。要输出列表中的前三个元素,需要指定索引0和3,这将返回索引为0、1和2的元素。
下面的示例处理的是一个运动队成员列表:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])
代码打印该列表的一个切片,其中只包含三名队员。输出也是一个列表,其中包含前三名队员:
['charles', 'martina', 'michael']
你可以生成列表的任意子集。例如,如果要提取列表的第二、第三和第四个元素,可将起始索引指定为 1 ,并将终止索引指定为 4
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[1:4])
此时,切片始于 'martina' 、终于 'florence'
['martina', 'michael', 'florence']
如果没有指定第一个索引,Python将自动从列表开头开始:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])
由于没有指定起始索引,Python从列表开头开始提取:
['charles', 'martina', 'michael', 'florence']
要让切片终止于列表末尾,也可使用类似的语法。例如,如果要提取从第三个元素
到列表末尾的所有元素,可将起始索引指定为 2 ,并省略终止索引:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])
Python将返回从第三个元素到列表末尾的所有元素:
['michael', 'florence', 'eli']
无论列表多长,这种语法都能够让你输出从特定位置到列表末尾的所有元素。上一章说过,负数索引返回离列表末尾相应距离的元素,因此你可以输出列表末尾的任意切片。例如,如果要输出名单上的最后三名队员,可使用切片 players[-3:]
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])
上述代码打印最后三名队员的名字,即便队员名单长度发生变化,也依然如此。
注意    可在表示切片的方括号内指定第三个值。这个值告诉Python在指定范围
内每隔多少元素提取一个。

 4.4.2 遍历切片

如果要遍历列表的部分元素,可在 for 循环中使用切片。下面的示例遍历前三名队员,并打印他们的名字:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("Here are the first three players on my team:")
for player in players[:3]:
    print(player.title())
代码没有遍历整个队员列表,而只遍历前三名队员:
Here are the first three players on my team:
Charles
Martina
Michael
在很多情况下,切片都很有用。例如,编写游戏时,你可以在玩家退出游戏时将其最终得分加入一个列表中,然后将该列表按降序排列以获取三个最高得分,再创建一个只包含前三个得分的切片;处理数据时,可使用切片来进行批量处理;编写Web应用程序时,可使用切片来分页显示信息,并在每页显示数量合适的信息。

4.4.3 复制列表

我们经常需要根据既有列表创建全新的列表。下面来介绍复制列表的工作原理,以及复制列表可提供极大帮助的一种情形。
要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引( [:] )。这让Python创建一个始于第一个元素、终止于最后一个元素的切片,即整个列表的副本。
例如,假设有一个列表包含你最喜欢的四种食品,而你想再创建一个列表,并在其中包含一位朋友喜欢的所有食品。不过,你喜欢的食品,这位朋友也都喜欢,因此可通过复制来创建这个列表:
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
首先,创建一个你喜欢的食品列表,名为 my_foods。然后创建一个名为 friend_foods 的新列表 。在不指定任何索引的情况下从列表my_foods中提取一个切片,从而创建这个列表的副本,并将该副本赋给变量friend_foods 。打印这两个列表后,我们发现其包含的食品相同:
My favorite foods are:
['pizza', 'falafel', 'carrot cake']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake']
例如,下面演示了在不使用切片的情况下复制列表的情况:
my_foods = ['pizza', 'falafel', 'carrot cake']
# 这行不通:
friend_foods = my_foods
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
这里将 my_foods 赋给 friend_foods ,而不是将 my_foods 的副本赋给friend_foods 。这种语法实际上是让Python将新变量friend_foods关联到已与 my_foods 相关联的列表,因此这两个变量指向同一个列表。有鉴于此,当我们将 'cannoli' 添加到 my_foods 中时,它也将出现在 friend_foods
中。同样,虽然 'ice cream' 好像只被加入到了 friend_foods 中,但它也将出现在这两个列表中。
输出表明,两个列表是相同的,这并非我们想要的结果:
My favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
注意  暂时不要考虑这个示例中的细节。当试图使用列表的副本时结果出乎意
料,基本上都要确认你是否像第一个示例那样使用切片复制了列表。

 4.4.4 练习

练习4-10:切片

选择你在本章编写的一个程序,在末尾添加几行代码,以完成如下任务。
1.打印消息“The first three items in the list are:”,再使用切片来打印列表的前三个元素。
2.打印消息“Three items from the middle of the list are:”,再使用切片来打印列表的中间三个元素。
3.打印消息“The last three items in the list are:”,再使用切片来打印列表的末尾三个元素。
my_foods = ['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
print("The first three items in the list are:")
for food in my_foods[:3]:
    print(food)
print("\nThree items from the middle of the list are:")
for food in my_foods[1:4]:
    print(food)
print("\nThe last three items in the list are:")
for food in my_foods[-3:]:
    print(food)

练习4-11:你的比萨,我的比萨

在你为完成练习4-1而编写的程序中,创建比萨列表的副本,并将其赋给变量 friend_pizzas ,再完成如下任务。
1.在原来的比萨列表中添加一种比萨。
2.在列表 friend_pizzas 中添加另一种比萨。
3.核实有两个不同的列表。为此,打印消息“My favorite pizzas are:”,再使用一个 for 循环来打印第一个列表;打印消息“My friend's favorite pizzas are:”,再使用一个 for 循环来打印第二个列表。核实新增的比萨被添加到了正确的列表中。
pizzas = ['seafood', 'sausage', 'cheese']
friend_pizzas = pizzas[:]

pizzas.append("hotdog")
friend_pizzas.append("vegetable")

print("my favorite pizzas are:")
for pizza in pizzas:
    print(pizza)
print("my friend favorite pizzas are:")
for pizza in friend_pizzas:
    print(pizza)

练习4-12:使用多个循环

在本节中,为节省篇幅,程序foods.py的每个版本都没有使用 for 循环来打印列表。请选择一个版本的foods.py,在其中编写两个 for 循环,将各个食品列表打印出来。
my_foods = ['pizza', 'falafel', 'carrot cake']
# 这行不通:
friend_foods = my_foods[:]
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("My favorite foods are:")
for my_food in my_foods:
    print(my_food)
print("\nMy friend's favorite foods are:")
for friend_food in friend_foods:
    print(friend_food)

4.5 元组

列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值称为不可变的 ,而不可变的列表被称为 元组

4.5.1 定义元组

元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组后,就可使用索引来访问其元素,就像访问列表元素一样。
例如,如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它们是不能修改的:
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])
首先定义元组dimensions,为此使用了圆括号而不是方括号。接下来,分别打印该元组的各个元素,使用的语法与访问列表元素时使用的语法相同:
200
50
下面来尝试修改元组 dimensions 的一个元素,看看结果如何:
dimensions = (200, 50)
dimensions[0] = 250
代码试图修改第一个元素的值,导致Python返回类型错误消息。由于试图修改元组的操作是被禁止的,因此Python指出不能给元组的元素赋值:
Traceback (most recent call last):
 File "dimensions.py", line 2, in 
 dimensions[0] = 250
TypeError: 'tuple' object does not support item assignment
注意  严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果你要定义只包含一个元素的元组,必须在这个元素后面加上逗号:
my_t = (3,)
创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素。

 4.5.2 遍历元组中的所有值

像列表一样,也可以使用 for 循环来遍历元组中的所有值:
dimensions = (200, 50)
for dimension in dimensions:
    print(dimension)
就像遍历列表时一样,Python返回元组中所有的元素:
200
50

4.5.3 修改元组变量

虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:
dimensions = (200, 50)
print("Original dimensions:")
for dimension in dimensions:
    print(dimension)

dimensions = (400, 100)
print("\nModified dimensions:")
for dimension in dimensions:
    print(dimension)
首先定义一个元组,并将其存储的尺寸打印出来。接下来,将一个新元组关联到变量 dimensions 。然后,打印新的尺寸。这次,Python不会引发任何错误,因为给元组变量重新赋值是合法的:
Original dimensions:
200
50

Modified dimensions:
400
100
相比于列表,元组是更简单的数据结构。如果需要存储的一组值在程序的整个生命周期内都不变,就可以使用元组。

4.5.4 练习

练习4-13:自助餐

有一家自助式餐馆,只提供五种简单的食品。请想出五种简单的食品,并将其存储在一个元组中。
1.使用一个 for 循环将该餐馆提供的五种食品都打印出来。
2.尝试修改其中的一个元素,核实Python确实会拒绝你这样做。
3.餐馆调整了菜单,替换了它提供的其中两种食品。请编写一个这样的代码块:给元组变量赋值,并使用一个 for 循环将新元组的每个元素都打印出来。
foods = ("tofu", "fish", "meat", "pork", "vegetable")
for food in foods:
    print(food)
# 修改菜单
foods = ("tea", "coffee", "meat", "pork", "vegetable")
print("\nAfter editting:")
for food in foods:
    print(food)

你可能感兴趣的:(习题,python)