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

时间:2011-06-14 04:56:26

标签: python

我有一个清单:

list1=[]

列表的长度未确定,所以我试图将对象附加到list1的末尾,如下所示:

for i in range(0, n):

    list1=list1.append([i])

但我的输出一直给出这个错误:AttributeError:'NoneType'对象没有属性'append'

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

8 个答案:

答案 0 :(得分:56)

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

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))

答案 1 :(得分:14)

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

答案 2 :(得分:3)

Mikola有正确的答案,但有一点解释。它将在第一次运行,但由于append返回None,在for循环的第一次迭代之后,您的赋值将导致list1等于None,因此错误被抛出第二次迭代。

答案 3 :(得分:2)

append返回None,因此在第二次迭代中,您调用NoneType的方法append。只需删除作业:

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

答案 4 :(得分:2)

我个人更喜欢+运算符而不是append

for i in range(0, n):

    list1 += [[i]]

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

答案 5 :(得分:0)

与Mikola一样,append()返回一个void,因此每次迭代都会将list1设置为非类型,因为append返回一个非类型。在下一次迭代中,list1为null,因此您尝试调用null的append方法。 Nulls没有方法,因此你的错误。

答案 6 :(得分:0)

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

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

另请注意,在python中,您始终可以使用方法len()

获取列表长度

答案 7 :(得分:-1)

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