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

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

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

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


编者按:

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


当前回答

您可以将(元素)追加到列表中,例如:

s1.append(i)

您当前试图做的是访问不存在的元素(s1[i])。

其他回答

我在寻找类似问题时遇到了这个SO问题。我必须构建一个2D数组,然后用dict中的元素替换每个列表中的一些元素(在2D数组中)。然后我遇到了这个SO问题,这对我很有帮助,也许这会帮助其他初学者。关键技巧是将2D数组初始化为numpy数组,然后使用array[i,j]而不是array[i][j]。

作为参考,这是我必须使用的一段代码:

nd_array = []
for i in range(30):
    nd_array.append(np.zeros(shape = (32,1)))
new_array = []
for i in range(len(lines)):
    new_array.append(nd_array)
new_array = np.asarray(new_array)
for i in range(len(lines)):
    splits = lines[i].split(' ')
    for j in range(len(splits)):
        #print(new_array[i][j])
        new_array[i,j] = final_embeddings[dictionary[str(splits[j])]-1].reshape(32,1)

现在我知道我们可以使用列表理解,但为了简单起见,我使用了嵌套的for循环。希望这能帮助其他看到这篇文章的人。

除非列表已经用至少i+1个元素初始化,否则不能向xs[i]=value这样的列表赋值。相反,使用xs.append(value)将元素添加到列表末尾。(虽然如果使用字典而不是列表,则可以使用赋值符号。)

创建空列表:

>>> xs = [None] * 10
>>> xs
[None, None, None, None, None, None, None, None, None, None]

为上述列表的现有元素赋值:

>>> xs[1] = 5
>>> xs
[None, 5, None, None, None, None, None, None, None, None]

请记住,像xs[15]=5这样的东西仍然会失败,因为我们的列表只有10个元素。

range(x)从[0,1,2,…x-1]创建列表

# 2.X only. Use list(range(10)) in 3.X.
>>> xs = range(10)
>>> xs
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

使用函数创建列表:

>>> def display():
...     xs = []
...     for i in range(9): # This is just to tell you how to create a list.
...         xs.append(i)
...     return xs
... 
>>> print display()
[0, 1, 2, 3, 4, 5, 6, 7, 8]

列表理解(使用正方形,因为对于范围,您不需要执行所有这些操作,只需返回范围(0,9)):

>>> def display():
...     return [x**2 for x in range(9)]
... 
>>> print display()
[0, 1, 4, 9, 16, 25, 36, 49, 64]

列表始终是“可迭代的”,您可以始终向其中添加新元素:

insert:list.insert(indexPosition,value)append:list.append(值)扩展:列表扩展(值)

在您的例子中,您实例化了一个长度为0的空列表。因此,当您尝试使用列表索引(i)向列表中添加任何值时,它指的是不存在的位置。因此,您得到了错误“IndexError:list赋值索引超出范围”。

您可以改为尝试:

s1 = list();
for i in range(0,9):
   s1.append(i)

print (s1)

要创建一个大小为10的列表(比方说),可以先创建一个空数组,比如np.empty(10),然后使用arrayName.tolist()将其转换为列表。或者,也可以将它们链接起来。

            **`np.empty(10).tolist()`**

使用嵌套列表综合创建大小为n的2D矩阵的一种简单方法:

m = [[None for _ in range(n)] for _ in range(n)]

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

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

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

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

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