【问题标题】:Best practice to append value to an empty list [duplicate]将值附加到空列表的最佳实践[重复]
【发布时间】:2015-08-21 05:55:29
【问题描述】:

我只是对以下代码片段不工作感到好奇,它应该初始化一个空列表并即时附加一个初始值。第二个片段正在工作。它出什么问题了?这种初始化有最佳实践吗?

>>> foo = [].append(2)
>>> print foo
None
>>> foo = []
>>> foo.append(2)
>>> print foo
[2]

编辑:似乎我对语法有误解。正如下面已经指出的,append 总是返回 None 作为结果值。我首先想到的是 [] 将返回一个空列表对象,其中追加应将第一个元素放入其中,然后将列表分配给 foo。那是错误的。

【问题讨论】:

  • 那么为什么不直接使用foo = [2]呢?当您可以直接指定初始值时,根本不需要调用appendlist.append() 就地更改列表,因此始终返回 None
  • 您要打印的是[].append(2) 而不是foo 本身。 foo = [2]foo = []; foo.append(2) 可以。
  • @raymelfrancisco 感谢您回答我的简单问题。我无法解释,为什么这必须被否决。有些人可能已经通过母乳喂养获得了知识。谢谢。
  • 我认为他的问题实际上是在问为什么你不能像foo =[].append(2) 这样的理论操作,因为正常这样做显然没有意义。

标签: python list initialization


【解决方案1】:

您不能执行以下任一操作的实际原因,

l = [].append(2)
l = [2,3,4].append(1)

是因为.append() 总是返回None 作为函数返回值。 .append() 应该就地完成。

有关数据结构的文档,请参阅 here。总而言之,如果要初始化列表中的值,请执行以下操作:

l = [2]

如果您想初始化一个空列表以在函数/操作中使用,请执行以下操作:

l = []
for x in range(10):
    value = a_function_or_operation()
    l.append(value)

最后,如果你真的想要像l = [2,3,4].append() 这样进行评估,请使用+ 运算符,例如:

l1 = []+[2]
l2 = [2,3,4] + [2]
print l1, l2
>>> [2] [2, 3, 4, 2]   

这通常是您初始化列表的方式。

【讨论】:

  • 感谢您的回答。我已经知道该怎么做,但我在问自己为什么第一个语法不起作用。
  • @ferdy - 我已经编辑了我的答案以包含我对该主题的所有知识。最初我的回答措辞很糟糕。希望我编辑的版本更有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
相关资源
最近更新 更多