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

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

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

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


编者按:

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


当前回答

我有点惊讶,创建初始化列表的最简单方法不是在这些答案中。只需在列表函数中使用生成器:

list(range(9))

其他回答

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

s1.append(i)

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

有两种“快速”方法:

x = length_of_your_list
a = [None]*x
# or
a = [None for _ in xrange(x)]

看起来[None]*x更快:

>>> from timeit import timeit
>>> timeit("[None]*100",number=10000)
0.023542165756225586
>>> timeit("[None for _ in xrange(100)]",number=10000)
0.07616496086120605

但如果你对一个范围(例如[0,1,2,3,…,x-1])很满意,那么范围(x)可能是最快的:

>>> timeit("range(100)",number=10000)
0.012513160705566406

我在寻找类似问题时遇到了这个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循环。希望这能帮助其他看到这篇文章的人。

s1 = []
for i in range(11):
   s1.append(i)

print s1

要创建列表,只需使用以下括号:“[]”

要向列表中添加内容,请使用list.append()

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

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