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)
Другие вопросы по тегам