22

我正在从 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)      

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

4

3 回答 3

38

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

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]

最好让事情保持清晰,并使用两个单独的分配,给每个变量自己的空列表。

于 2012-12-15T11:38:36.933 回答
5

换行

x_list, ord_list = []

to

x_list, ord_list = [], []
于 2012-12-15T11:38:27.230 回答
0

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

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

于 2016-09-12T04:50:15.003 回答