Ошибка значения: слишком много значений для распаковки (ожидается 2) при попытке выполнить итерацию по двум спискам одновременно

#python #list

Вопрос:

Кто — нибудь может объяснить, в чем проблема с этим кодом?

 for game_name,game_size in games_names,games_sizes:
    print(f'Game_Name = {game_name} Size = {game_size}')
 

Это код Python, в котором я пытаюсь перебрать два списка и распечатать их значения, но это приводит к этой ошибке:

Ошибка значения: слишком много значений для распаковки (ожидается 2)

Комментарии:

1. Привет, пожалуйста, используйте уценку для своего кода.

Ответ №1:

Если вы хотите выполнить итерацию по 2 спискам в один и тот же момент, вам следует использовать zip() функцию.

Пример:

 >>> lol = [1,2,3,4,5]
>>> kek = [6,7,8,9,10]
>>> for num, secnum in zip(lol, kek):
...     print(num, secnum)
 

Позвольте мне объяснить, почему вы не можете «распаковать» его.
Например, предположим, что у нас есть этот список:
arr = [1, 2, 3, 4, 5] . На каждой итерации вы можете получить только 1 объект, верно?

 one = arr[0]
two = arr[2]
...
 

Так вот как мы могли бы получить значения из списка.
Мы тоже можем присваивать такие значения:

 one, two, three = arr[0], arr[1], arr[2]
 

В python есть * знак, означающий, что вы можете «упаковать» значение в список.

 colors = ['cyan', 'magenta', 'yellow', 'black']
cyan, magenta, *other = colors

print(cyan)
print(magenta)
print(other)
 

Выход:

 cyan
magenta
['yellow', 'black']
 

Краткое изложение того, что нужно сделать для распаковки:

  1. Распаковка назначает элементы списка нескольким переменным.
  2. Используйте звездочку (*) перед переменной, подобной этой *variable_name, чтобы упаковать оставшиеся элементы списка в другой список.