如何追加到空列表的末尾?


79

我有一个清单:

list1=[]

列表的长度不确定,因此我尝试将对象追加到list1的末尾,如下所示:

for i in range(0, n):

    list1=list1.append([i])

但是我的输出始终显示此错误:AttributeError:'NoneType'对象没有属性'append'

这是因为list1从一个空列表开始吗?如何解决此错误?


41
请不要-1。append()返回None的事实可以欺骗初学者。这个问题是真实的。
e-satis

Answers:


73

append实际更改列表。同样,它需要一个item,而不是一个列表。因此,您所需要做的就是

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

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

我认为您的实际使用更为复杂,但是您也许可以使用列表推导,这对于它来说更Python化:

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

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


谢谢,最后一点非常有帮助,并将我的代码缩短了一堆
LostLin11年

@AndrewJaffe,列表列表呢?
Py-ser 2014年

1
这取决于您想做什么。append会添加到最外面的列表,但是您可以通过建立索引来a[-1].append(3)将其添加3到嵌套列表中:附加到的最后一个子列表中a
Andrew Jaffe 2014年



3

Mikola的答案正确,但更多的解释。它将第一次运行,但是因为appendNone在for循环的第一次迭代之后返回,所以您的赋值将导致list1相等None,因此将在第二次迭代时引发错误。


3

我个人更喜欢+操作员append

for i in range(0, n):

    list1 += [[i]]

但这每次都会创建一个新列表,因此如果性能至关重要,则可能不是最佳列表。


1

请注意,您还可以使用insert来将数字放入列表中的所需位置:

initList = [1,2,3,4,5]
initList.insert(2, 10) # insert(pos, val) => initList = [1,2,10,3,4,5]

还要注意,在python中,您始终可以使用len()方法获得列表长度


0

就像Mikola所说的,append()返回一个void,因此每次迭代都将list1设置为nonetype,因为append会返回nonetype。在下一次迭代中,list1为null,因此您尝试调用null的append方法。空没有方法,因此是您的错误。


-2

使用my_list.append(...),并且不要使用和其他列表追加,因为列表是可变的。


2
这个答案很难理解(例如,我不确定您所说的第二部分是什么意思),或者从现有答案(从2014年开始)重复信息,或者(从字面上看)完全错误(OP的代码不包含my_list变量)。
melpomene
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.