Другой ответ дает альтернативное решение, но я упомяну, что проблема в том, что
for x,y in choice.split(";")
повторяет результаты, возвращаемые choice.split(";")
.
Обратите внимание, что есть разницамежду
for t in choice.split(";") # t is each element of the list returned by split
и
t = choice.split(";") # t is the whole list returned by split
Будет понятнее, если вы немного измените понимание, чтобы получить некоторую отладочную информацию:
>>> choices = [(t, len(t))
for choice in tmp.split("\n")
for t in choice.split(";")]
>>> choices
[('one ', 4), (' 1 ', 3), (' two ', 5), (' 2 ', 3), (' three ', 7), (' 3', 2)]
Другое решение будетиспользовать выражения присваивания :
choices = [(x, y := choice.split(";"), (x.strip(), y.strip()))[1]
for choice in tmp.split("\n")
if choice.find(";") != -1]
Не проверено, поскольку это работает только в 3.8, а у меня нет интерпретатора 3.8. Это должно работать, хотя.
Не делайте этого, хотя. Я показываю это только потому, что думаю, что это было то, что вы имели в виду, когда писали for x,y in choice.split(";")
.