ValueError:解包需要多于0个值(python列表)

时间:2012-12-15 11:36:43

标签: python

我从Google代码类学习python。我正在尝试练习。

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)      

我认为由于在一行上初始化两个空列表而引发错误。如果在单独的行上初始化它们,则不会再发生错误。这是什么原因?

3 个答案:

答案 0 :(得分:35)

您正在尝试使用元组赋值:

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_listord_list都将指向相同的列表,通过一个变量所做的任何更改都将在另一个变量上显示:

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

更好地保持清晰,并使用两个单独的分配,为每个变量提供自己的空列表。

答案 1 :(得分:4)

更改行

x_list, ord_list = []

to

x_list, ord_list = [], []

答案 2 :(得分:0)

返回类型的函数与函数中预期的值不匹配...

检查从您期望的函数和变量返回的变量数