【问题标题】:ValueError: need more than 0 values to unpack (python lists)ValueError:需要超过 0 个值才能解压(python 列表)
【发布时间】:2016-09-12 12:50:15
【问题描述】:

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

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

【问题讨论】:

  • 反对者请发表评论

标签: python


【解决方案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

这称为元组解包。另一方面,如果您尝试对 one 空列表文字 (x_list = ord_list = []) 使用多重赋值,那么 x_list 和 ord_list 都将指向 same em> 列表,通过一个变量所做的任何更改都将在另一个变量上可见:

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

最好让事情一目了然,并使用两个单独的赋值,给每个变量自己的空列表。

【讨论】:

  • +1 @Martijn Pieters 这有帮助。你能否详细说明为什么你按照你的方式对不同的方法进行排名。尝试学习这方面的一些最佳实践。
  • @musked:不确定你的意思。充其量我有两种命名方法,一种使用元组赋值,另一种使用两个单独的赋值。我会使用后者,因为它更明确,可读性很重要。
  • 是的,这正是我的意思,所以你根据可读性进行排名,我想我可能错过了一些东西。
【解决方案2】:

换行

x_list, ord_list = []

to

x_list, ord_list = [], []

【讨论】:

  • 这将是我想做的最简单的等价物。谢谢。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多