我有一个清单:
list1=[]
列表的长度未确定,所以我试图将对象附加到list1的末尾,如下所示:
for i in range(0, n):
list1=list1.append([i])
但我的输出一直给出这个错误:AttributeError:'NoneType'对象没有属性'append'
这是因为list1作为空列表开始吗?如何解决此错误?
答案 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(...) 并且不要使用和其他列表作为列表追加是可变的。