如何创建可容纳10个元素的空列表?

之后,我想在该列表中分配值。例如:

xs = list()
for i in range(0, 9):
   xs[i] = i

但是,这会导致IndexError:list赋值索引超出范围。为什么?


编者按:

在Python中,列表没有设置容量,但无法分配给尚未存在的元素。这里的答案显示了创建一个列表的代码,其中包含10个稍后要替换的“伪”元素。然而,遇到这个问题的大多数初学者实际上只是想通过向列表中添加元素来构建列表。这应该使用.append方法来完成,尽管通常会有特定于问题的方法来更直接地创建列表。请参阅为什么此迭代列表增长代码会导致IndexError:列表分配索引超出范围?如何重复向列表中添加元素?详细信息。


当前回答

从技术上讲,它不是一个列表,但在功能上与列表相似,并且长度固定

from collections import deque
my_deque_size_10 = deque(maxlen=10)

如果它已满,即获得10个项目,则添加另一个项目会导致项目@index 0被丢弃。第五。。但也可以在任意方向上追加。用于say

统计数据的滚动平均值在列表上滑动窗口,直到与另一个deque对象匹配。

如果您需要一个列表,那么当列表满时,只需使用列表(deque对象)

其他回答

公认的答案有一些陷阱。例如:

>>> a = [{}] * 3
>>> a
[{}, {}, {}]
>>> a[0]['hello'] = 5
>>> a
[{'hello': 5}, {'hello': 5}, {'hello': 5}]
>>> 

因此,每个字典都引用同一个对象。如果使用数组或对象进行初始化,则同样适用。

你可以这样做:

>>> b = [{} for i in range(0, 3)]
>>> b
[{}, {}, {}]
>>> b[0]['hello'] = 6
>>> b
[{'hello': 6}, {}, {}]
>>> 

请尝试以下操作:

lst = [None] * 10

上面将创建一个大小为10的列表,其中每个位置都初始化为None。之后,可以向其中添加元素:

lst = [None] * 10
for i in range(10):
    lst[i] = i

诚然,这并不是Python式的做事方式。最好这样做:

lst = []
for i in range(10):
    lst.append(i)

或者更简单的是,在Python2.x中,您可以这样做,用0到9的值初始化列表:

lst = range(10)

在Python 3.x中:

lst = list(range(10))

我很惊讶没有人建议这种创建空列表的简单方法。这是一个旧线程,但为了完整起见,只需添加此线程。这将创建一个包含10个空列表的列表

x = [[] for i in range(10)]

从技术上讲,它不是一个列表,但在功能上与列表相似,并且长度固定

from collections import deque
my_deque_size_10 = deque(maxlen=10)

如果它已满,即获得10个项目,则添加另一个项目会导致项目@index 0被丢弃。第五。。但也可以在任意方向上追加。用于say

统计数据的滚动平均值在列表上滑动窗口,直到与另一个deque对象匹配。

如果您需要一个列表,那么当列表满时,只需使用列表(deque对象)

此代码生成一个包含10个随机数的数组。

import random
numrand=[]
for i in range(0,10):
   a = random.randint(1,50)
   numrand.append(a)
   print(a,i)
print(numrand)