Случай использования: у меня длинная строка, разделенная на строки, и каждая строка имеет два элемента, разделенных запятой.Странное поведение распаковки значений при расщеплении строки в Python
В идеале, это должно работать
[(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 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(",")]
Любое имеет представление о том, почему это происходит?
Спасибо за объяснение, почему мои предположения были неправильными. Оценил это :) – thismachinechills