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

kun*_*run 21 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)      
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 36

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

x_list, ord_list = []
Run Code Online (Sandbox Code Playgroud)

你可能想要使用多个赋值:

x_list = ord_list = []
Run Code Online (Sandbox Code Playgroud)

这不符合你的期望; 请改用以下内容:

x_list, ord_list = [], []
Run Code Online (Sandbox Code Playgroud)

或者,最好的是:

x_list = []
ord_list = []
Run Code Online (Sandbox Code Playgroud)

当使用以逗号分隔的变量名列表时,Python期望在右侧有一系列与数字变量匹配的表达式; 以下也是合法的:

two_lists = ([], [])
x_list, ord_list = two_lists
Run Code Online (Sandbox Code Playgroud)

这称为元组解包.如果,另一方面,您尝试使用具有多种分配一个文字(空单x_list = ord_list = []),那么这两个x_listord_list将指向相同的列表,并通过一个变量所做的任何更改将在其他变量可见:

>>> x_list = ord_list = []
>>> x_list.append(1)
>>> x_list
[1]
>>> ord_list
[1]
Run Code Online (Sandbox Code Playgroud)

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


Abh*_*jit 5

换线

x_list, ord_list = []

to

x_list, ord_list = [], []
Run Code Online (Sandbox Code Playgroud)