循环遍历Python中的字符串列表有时只能看到列表

时间:2017-04-10 18:20:49

标签: python string list for-loop

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

字符串上的调用列表应该给出字符列表。但为什么在这种情况下它只看到最后一个字符串? (注意,与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

这是另一个有效的打印循环:

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。谢谢。

1 个答案:

答案 0 :(得分:2)

您反复覆盖相同的ll变量。只保留最后写入的值。

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

characterLists = []

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

print(characterLists)

更好的是,只需使用列表理解:

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