【问题标题】:Looping through a list of strings in Python sometimes only sees last element of list在 Python 中循环遍历字符串列表有时只能看到列表的最后一个元素
【发布时间】:2017-04-10 18:20:48
【问题描述】:

(ep 是 len 为 58 的字符串列表。)

在字符串上调用 list 应该给出一个字符列表。但是为什么在这种情况下它只看到最后一个字符串? (注意,与this question 不同,每个元素都是唯一的)。

for s in ep:
    ll = list(s)
ll
['3', '5', '0', ' ', 'U', '.', 'S', '.', ' ', '1', '0', '1', '0']`

在使用 print() 的循环中,它会看到所有元素,但不会修改任何元素:

for s in ep:
    ll = list(s)
    print(s)
350 U.S. 1
350 U.S. 3

这是另一个可以使用 print 的 for 循环:

for e in ep:
    print([e])
['350 U.S. 1']
['350 U.S. 3']

另一个没有它,只看到最后一个元素:

for e in ep:
    ep5 = [e.strip("'").replace(' ', ",")]
ep5
['350,U.S.,1010']

最后:

for e in ep:
    ep11 = e.split()
    print(ep11)
['350', 'U.S.', '1']
['350', 'U.S.', '3']
...<snip>...
['350', 'U.S.', '1010']

但是....

ep11
['350', 'U.S.', '1010']

列表推导和枚举(省略)都可以看到所有元素,但不是简单的 for 循环,至少没有 print()。我知道 print() 添加了一个换行符,但我看不出它是如何单独解释这种行为的。谁能给我解释一下? Ubuntu 16.04 上的 Python 3.5.2。谢谢。

【问题讨论】:

  • 您确实扩展 ll 列表,因此除了前一个迭代之外的所有迭代都没有效果,因为结果被丢弃了。
  • 旁注,你真的应该改进你的变量名:llepep11 都是没有意义的。 (ep is a list of strings with a len of 58.) 如果变量命名正确,则不需要此免责声明。

标签: python string list for-loop


【解决方案1】:

您一遍又一遍地覆盖相同的ll 变量。只保留最后写入的值。

如果您希望结果是字符串变量列表,则创建一个新列表并在每次迭代时添加到它:

characterLists = []

for s in strings:
    characterLists.append(list(s))

print(characterLists)

更好的是,只需使用列表推导:

characterLists = [list(s) for s in strings]
print(characterLists)

【讨论】:

  • 哇。当我从电脑上起身时,我突然想到这可能类似于文件对象中的“搜索”,您最终会到达文件的末尾并且必须重置光标。但我不记得曾在任何教程中听到过这种类比。无论如何,当我回来补充时,我已经有 2 个回复了!听起来我需要更深入地消化 for 循环。让我这样做,然后在今天晚些时候回来选择一个答案。谢谢大家!
  • 只有一个 asnwer(我的):P
猜你喜欢
  • 2015-01-12
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
  • 2023-01-24
  • 1970-01-01
相关资源
最近更新 更多