Подтвердить что ты не робот

Список списков и "Слишком много значений для распаковки"

Я пытаюсь использовать следующий код в списке списков для создания нового списка списков, чьи новые элементы являются определенной комбинацией элементов из списков внутри старого списка... если это имеет смысл! Вот код:

 for index, item in outputList1:
    outputList2 = outputList2.append(item[6:].extend(outputList1[index+1][6:]))

Однако я получаю сообщение "Слишком много значений для распаковки". Кажется, я даже получил ошибку со следующим кодом:

    for index, item in outputList1:
       pass

Что я могу делать неправильно?

4b9b3361

Ответ 1

оператор for выполняет итерацию по итерабельному - в случае списка он перебирает содержимое по одному, поэтому на каждой итерации доступно одно значение.

При использовании for index, item in list: вы пытаетесь распаковать одно значение на две переменные. Это будет работать с for key, value in dict.items():, который выполняет итерации по клавишам/значениям dicts в произвольном порядке. Поскольку вам, похоже, нужен числовой индекс, существует функция enumerate(), которая получает значение итерабельного, а также индекс для него:

for index, item in enumerate(outputList1):
    pass

edit: так как в заголовке вашего вопроса упоминается "список списков", я должен указать, что при повторении списка список распаковки более чем одной переменной будет работать, если каждый элемент списка сам является итерируемым. Например:

list = [ ['a', 'b'], ['c', 'd'] ]
for item1, item2 in list:
    print item1, item2

Это выведет:

a b
c d

как ожидалось. Это работает аналогично тому, что делает dicts, только вы можете иметь два, три или несколько элементов в содержащихся списках.

Ответ 2

Вы забыли использовать перечисление, вы хотите сделать это:

for index,item in enumerate(outputList1) :
  pass