【问题标题】:Nested Python for loop only works with the last item in a list嵌套 Python for 循环仅适用于列表中的最后一项
【发布时间】:2021-06-27 14:23:15
【问题描述】:

我遇到了一个问题,即 Python 中嵌套循环中的第二个 for 循环仅适用于列表中的最后一项。

input = input("Words: ")
print(input)
list = input.split('[:,\s]')
print(list)

for each in list:
    for i, item in enumerate(list):
        joined = each + "TEST"
        print(joined)

正如您在代码中看到的那样,我试图遍历列表中的每个项目,然后在循环的每个循环中,然后我想将字符串“TEST”附加到当前首先循环的单词的末尾循环。

让我们解析一个输入,例如"aword, anotherword, yetanotherword, certainword"。我希望程序产生以下输出"awordTEST, anotherwordTEST, yetanotherwordTEST, certainwordTEST"

这是实际的输出"aword, anotherword, yetanotherword, certainwordTEST"

我不明白为什么第二个循环只对列表中的最后一项有效。

编辑:建议的解决方案是使用单个 for 循环。问题是我需要稍后使用第二个 for 循环,并且它在第二个 for 循环中很重要。谢谢。

【问题讨论】:

  • 旁注:不要使用listinput 作为变量名;从分配给它们的那一刻起,您就无法访问 input 函数和 list 构造函数。
  • 对编辑的回应:欢迎您在编写完整代码时做您想做的事,但是内部循环(除了乘以输出之外什么都不做)与您的问题无关,因此,不应成为minimal reproducible example 的一部分。
  • 嗯,我没有注意到,因为这些值是分配的,这些函数后来没有使用。谢谢提醒!
  • @541daw35d:是的,在这种情况下,它起作用了(它只是在它们被命名的行之后阻止了对内置插件的访问)。如果你在一个函数中完成它,它根本不会起作用(input = input("Words: ") 会随着UnboundLocalError 而死)。

标签: python list loops input split


【解决方案1】:

str.split 不接受要拆分的正则表达式。如果您查看list 的内容,您会发现它只是原始字符串。如果要在正则表达式上拆分,则必须使用the re module

import re

inp = input("Words: ")
print(inp)
lst = re.split(r'[:,\s]+', inp)
print(lst)

for each in lst:
    joined = each + "TEST"
    print(joined)

Try it online!

我删除了内部循环,因为它除了乘以输出之外什么都不做,并重命名变量以避免名称隐藏内置函数。

【讨论】:

  • 我怎么没见过这个!现在一切都说得通了!愚蠢的我,虽然“,”意味着列表中的另一个项目......我会将其标记为答案,这样其他人就不会停下来,但 SO 会让我在 7 分钟内完成,所以我们都需要等待......
【解决方案2】:

您需要更改此部分:

for each in list:
    for i, item in enumerate(list):
        joined = each + "TEST"
    print(joined)

所以结果是

awordTEST
anotherwordTEST
yetanotherwordTEST
certainwordTEST

【讨论】:

  • 问题不在你改的代码;这减少了重复输出,但不能解决 OP 的问题(由于滥用str.split,仅在最后一个单词后缀)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 2018-02-15
相关资源
最近更新 更多