为什么“x = x.append(...)”在 for 循环中不起作用?

新手上路,请多包涵

我试图将对象重复附加到列表的末尾,如下所示:

 list1 = []
n = 3
for i in range(0, n):
    list1 = list1.append([i])

但我收到如下错误: AttributeError: 'NoneType' object has no attribute 'append' 。这是因为 list1 开始时是一个空列表吗?我该如何解决这个错误?


这个问题具体是关于如何解决问题并正确附加到列表中的。原代码中,报错是在使用循环时出现的,因为 .append None为什么 返回 None (底层设计决策),请参阅 为什么这些列表操作返回 None,而不是结果列表? .

如果你有一个 IndexError 试图分配给一个刚好超过列表末尾的索引 - 那是行不通的;您需要 .append 方法。有关详细信息,请参阅 为什么此迭代列表增长代码会出现 IndexError:列表分配索引超出范围?如何重复向列表中添加元素? .

如果要多次附加 相同的 值,请参阅 Python:将项目附加到列表 N 次

原文由 LostLin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 458
2 个回答

append 实际上 更改 了列表。此外,它需要一个 item ,而不是一个列表。因此,您只需要

for i in range(n):
   list1.append(i)

(顺便说一句,请注意,在这种情况下,您可以使用 range(n) 。)

我假设你的实际使用更复杂,但你可以使用列表理解,这对这个更 pythonic:

 list1 = [i for i in range(n)]

或者,在这种情况下,在 Python 2.x 中 range(n) 实际上已经创建了您想要的列表,尽管在 Python 3.x 中,您需要 list(range(n))

原文由 Andrew Jaffe 发布,翻译遵循 CC BY-SA 3.0 许可协议

您不需要赋值运算符。附加返回无。

原文由 Mikola 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题