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

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

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

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


编者按:

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


当前回答

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

print s1

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

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

其他回答

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

所有列表都可以容纳任意数量的元素,只受可用内存的限制。列表中唯一重要的“大小”是其中当前元素的数量。

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

第一次通过循环时,i等于0。因此,我们尝试xs[0]=0。这不起作用,因为列表中当前有0个元素,因此0不是有效的索引。

我们不能使用索引来写入不存在的列表元素——我们只能覆盖现有的元素。相反,我们应该使用.append方法:

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

您将注意到的下一个问题是,列表实际上只有9个元素,因为范围函数跳过了终点。(正如旁注:[]与list()一样有效,分号是不必要的,如果从0开始,范围只需要一个参数。)解决这些问题可以:

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

然而,这仍然缺少标记-range并不是某种神奇的关键字,它是语言的一部分,例如def。

在2.x中,range是一个函数,它直接返回我们已经想要的列表:

xs = range(10) # 2.x specific!
# In 3.x, we don't get a list; we can do a lot of things with the
# result, but we can't e.g. append or replace elements.

在3.x中,range是一个设计巧妙的类,range(10)创建了一个实例。为了获得所需的列表,我们可以简单地将其输入到列表构造函数:

xs = list(range(10)) # correct in 3.x, redundant in 2.x

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

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

另一个选项是对固定大小的数组(指针)使用numpy:

>pip安装数

import numpy as np


a = np.empty(10, dtype=np.object)
a[1] = 2
a[5] = "john"
a[3] = []

如果你只想要数字,你可以使用numpy:

a = np.arange(10)

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

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()`**

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