我正在尝试在循环中将int
添加到list
。下面的代码运行良好:
p = []
p.append(3)
但是,当我运行这段代码时:
p = []
for x in range(24):
p = p.append(3)
print(p)
我遇到错误:
AttributeError: 'NoneType' object has no attribute 'append'
同时,我希望列表的长度为24。
那么,为什么我不能将3s添加到列表中?
答案 0 :(得分:2)
append
不会返回list
,它会更改其被调用列表的状态。因此,当您分配p = p.append(3)
时,您正在分配p
的值None
,因此您会得到引用的错误。
要解决此问题,只需消除循环中的分配即可。
p = []
for x in range(24):
p.append(3)
print(p)
答案 1 :(得分:1)
不不分配。只需使用append
方法。如果您指定,则p
变为None
。
使用此:
p = []
for x in range(24):
p.append(3)
print(p)
答案 2 :(得分:1)
对于它的价值,您也可以在不使用完整循环和append
ing的情况下完成此操作:
将列表[3]
乘以24
:
[3] * 24
列表理解:
[3 for _ in range(24)]
或者想成为itertools.repeat
:
repeat(3, 24)
或使用numpy:
np.full(24, 3)
参见下文:
>>> p = []
>>> for x in range(24):
... p.append(3)
>>> p
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>> [3]*24
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>> [3 for _ in range(24)]
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>> list(repeat(3, 24))
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>> list(np.full(24, 3))
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]