ValueError: требуется более 0 значений для распаковки (списки Python)
Я получаю сообщение об ошибке, пока пишу свой код
tmp = c.pop(0) # taking out the first element from the list as the starting point
complete = tmp[0][-1]
print(complete)
while c != []:
complete += tmp[1][-1]
[index] = []
for i, pair in enumerate(c):
if pair[0] == tmp[1]:
[index].append(i)
temp = c.pop(index)
print(complete)
Я получаю эту ошибку в [index] == []
часть:
Traceback (most recent call last):
ValueError: need more than 0 values to unpack
Мой вопрос: почему возникает эта ошибка и как мне это исправить?
1 ответ
В Python, даже если переменная содержит список, она должна использоваться как обычная переменная, такая как index = []
, Когда вы используете [index] = []
Python считает, что вы хотите назначить первый элемент списка вашей переменной. Аналогично, когда вы используете код [first, last] = [1,2]
тогда переменная first
назначается 1 и переменная last
назначено 2. Это называется распаковка.
Также в [index].append(2)
, вы не должны использовать квадратные скобки вокруг имени переменной. Это не вызовет никаких ошибок, но то, что он сделает, это создаст новый список (с единственным значением, являющимся значением index
), а затем уничтожить список после выполнения строки.
Ваш код должен выглядеть следующим образом (при условии, что остальные части вашего кода верны). Также, как предложил этот комментарий, используйте c
вместо c != []
потому что пустой список ложен и соответствует соглашениям Python.:
tmp = c.pop(0) # taking out the first element from the list as the starting point
complete = tmp[0][-1]
print(complete)
while c: # c != []
complete += tmp[1][-1]
index = [] # [index] = []
for i, pair in enumerate(c):
if pair[0] == tmp[1]:
index.append(i) # [index].append(i)
temp = c.pop(index)
print(complete)
Как отмечено в комментариях, строка temp = c.pop(index)
выдаст ошибку, потому что pop ожидает целое число, а код дает ему список.
Однако из-за использования ОП index
в коде, я думаю, он хотел использовать индекс как целое число. Кроме того, ФП заявил, что использование temp
вместо tmp
было ошибкой.
tmp = c.pop(0) # taking out the first element from the list as the starting point
complete = tmp[0][-1]
print(complete)
while c:
complete += tmp[1][-1]
index = 0
for i, pair in enumerate(c):
if pair[0] == tmp[1]:
index = i
tmp = c.pop(index)
print(complete)