【发布时间】: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列表,因此除了前一个迭代之外的所有迭代都没有效果,因为结果被丢弃了。 -
旁注,你真的应该改进你的变量名:
ll、ep、ep11都是没有意义的。(ep is a list of strings with a len of 58.)如果变量命名正确,则不需要此免责声明。
标签: python string list for-loop