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

ValueError: требуется больше, чем 0 значений для распаковки (списки python)

Я изучаю python из класса кода Google. Я пытаюсь выполнить упражнения.

def front_x(words):
  x_list, ord_list = []
  for word in words:
    if word[0] == 'x':
      x_list.append(word)
    else:
      ord_list.append(word)
  return sorted(x_list) + sorted(ord_list)      

Я считаю, что ошибка возникает из-за инициализации двух пустых списков в одной строке. Если при инициализации их на отдельных строках больше ошибок не возникает. Это причина?

4b9b3361

Ответ 1

Вы пытаетесь использовать назначение кортежей:

x_list, ord_list = []

вы, вероятно, хотели использовать несколько назначений:

x_list = ord_list = []

который не будет делать то, что вы ожидаете; используйте вместо этого следующее:

x_list, ord_list = [], []

или, лучше всего:

x_list = []
ord_list = []

При использовании списка имен переменных, разделенных запятыми, Python ожидает, что будет последовательность выражений в правой части, которая соответствует числовым переменным; следующее было бы законным:

two_lists = ([], [])
x_list, ord_list = two_lists

Это называется распаковкой. Если, с другой стороны, вы пытались использовать несколько присваиваний с одним пустым литералом списка (x_list = ord_list = []), то оба x_list и ord_list будут указывать на один и тот же список, и любые изменения, сделанные с помощью одной переменной, будут видны на другая переменная:

>>> x_list = ord_list = []
>>> x_list.append(1)
>>> x_list
[1]
>>> ord_list
[1]

Лучше держать вещи кристально чистыми и использовать два отдельных назначения, предоставляя каждой переменной свой собственный пустой список.

Ответ 2

Измените строку

x_list, ord_list = []

to

x_list, ord_list = [], []

Ответ 3

возвращаемый тип функции не соответствует значениям, ожидаемым в функции...

проверить количество переменных, возвращаемых функцией и переменными, которые вы ожидаете