【发布时间】:2013-12-14 02:17:24
【问题描述】:
用例:我有一个由换行符分隔的长字符串,每行有两个由逗号分隔的元素。
理想情况下,这应该可以工作
[(x, y) for line in lines.split() for x, y in line.split(',')]
但它没有,并产生与下面相同的 ValueError。所以我试图分解问题以弄清楚这里发生了什么
lines = \
"""a,b
c,d
e,f
g,h"""
lines = [line for line in lines.split()]
print(lines)
print(len(lines))
print([len(line) for line in lines])
print(all(',' in line for line in lines))
[(x, y) for l in lines for x,y in l.split(',')]
产量:
/usr/bin/python3m /home/alex/PycharmProjects/test.py
['a,b', 'c,d', 'e,f', 'g,h']
4
[3, 3, 3, 3]
True
Traceback (most recent call last):
File "/home/alex/PycharmProjects/test.py", line 74, in <module>
...
File "/home/alex/PycharmProjects/test.py", line 63, in <listcomp>
[(x, y) for l in sines for x,y in l.split(',')]
ValueError: need more than 1 value to unpack
但是,如果我用经典的 for 循环替换最后一行中的列表推导:
for line in lines:
x, y = line.split(',')
执行成功:
['a,b', 'c,d', 'e,f', 'g,h']
4
True
[3, 3, 3, 3]
a b
c d
e f
g h
这简直让我发疯。如果我进一步分解它,我会发现列表、集合和生成器推导自己在尝试这样做:
[(x,y) for x, y in "a,b".split(",")]
有人知道为什么会发生这种情况吗?
【问题讨论】:
标签: python string split list-comprehension