请解释一下

2024-04-29 15:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套循环:

adj = ["red", "big", "tasty"]
fruits = ["apple", "banana", "cherry"]

for x in adj:
  for y in fruits:
    print(x, y)

通过阅读,我期望输出为:

red apple
big banana
tasty cherry

有人能给我解释一下为什么我会这样吗

red apple
red banana
red cherry
big apple
big banana
big cherry
tasty apple
tasty banana
tasty cherry

我真的很困惑,无法解决它

非常感谢


Tags: inappleforredtastybanana嵌套循环cherry
3条回答

每次循环运行时,循环内的所有事情都会发生(尽管可能会短路或退出循环:breakcontinuereturn来自封闭函数,或引发本地未捕获的异常,或任何迫使程序立即退出的事情,如拔出电源插头:)

内部循环位于外部循环内部(这就是嵌套它们的意义),因此每次通过外部循环时,整个内部循环都会单独发生,并重复发生

第一次运行外部循环时,x被设置为'red'。因此,该值用于内部循环的每个迭代,并因此与每个y值配对。对于其余的迭代,依此类推

如果您想要您期望的行为,请参见How to iterate through two lists in parallel?

循环第一个列表,对于第一个列表中的每个项目,循环第二个列表中的所有项目

就这样

adj[0], fruits[0] # red apple
adj[0], fruits[1] # red banana
adj[0], fruits[2] # red banana
adj[1], fruits[0] # red apple

等等

通过使用enumerate,您可以尝试更清楚地了解引擎盖下正在发生的事情,但这有点复杂,最终可能会使事情变得更加困难

for adj_index, adjective in enumerate(adjectives):
  for fruit_index, fruit in enumerate(fruits):
    print(f' {adjective} at {adj_index} and {fruit} at {fruit_index}')

正如Karl Knechtel在他的回答中提到的,您可以同时使用zip对列表进行迭代

for adj, fruit in zip(adj, fruits):
    print(adj, fruit)

首先选择x = 'red',通过将每个水果分配给内部循环中的y来打印每个水果

然后选择x = 'big',通过在内部循环中将每个水果分配给y来打印每个水果,依此类推

要获得所需的输出,首先需要将列表压缩在一起,然后在循环中打印

adj = ["red", "big", "tasty"]
fruits = ["apple", "banana", "cherry"]

adj_fruits = zip(adj, fruits)

for name in adj_fruits:
    print(name[0], name[1])

输出:

red apple
big banana
tasty cherry

相关问题 更多 >