当前位置: 首页 > 知识库问答 >
问题:

在python中创建一个具有一定大小的空列表

于恺
2023-03-14

我想创建一个可以容纳10个元素的空列表(或者任何最好的方式)。

然后,我要在该列表中分配值,例如,该列表应该显示0到9:

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

print  s1

但当我运行此代码时,它会生成一个错误,或者在另一种情况下,它只显示[](空)。

有人能解释为什么吗?

共有3个答案

祖迪
2023-03-14

Varunl当前接受的答案

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

适用于非引用类型(如数字)。不幸的是,如果您想创建一个列表中的列表,您将遇到引用错误。Python 2.7.6中的示例:

>>> a = [[]]*10
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
>>> 

如您所见,每个元素都指向同一个列表对象。要解决这个问题,可以创建一个方法,将每个位置初始化为不同的对象引用。

def init_list_of_objects(size):
    list_of_objects = list()
    for i in range(0,size):
        list_of_objects.append( list() ) #different object reference each time
    return list_of_objects


>>> a = init_list_of_objects(10)
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [], [], [], [], [], [], [], [], []]
>>> 

可能有一种默认的、内置的python方法(而不是编写函数),但我不确定它是什么。会很高兴被纠正的!

编辑:它是[[]for_in range(10)]

示例:

>>> [ [random.random() for _ in range(2) ] for _ in range(5)]
>>> [[0.7528051908943816, 0.4325669600055032], [0.510983236521753, 0.7789949902294716], [0.09475179523690558, 0.30216475640534635], [0.3996890132468158, 0.6374322093017013], [0.3374204010027543, 0.4514925173253973]]
贺宜修
2023-03-14

请尝试以下操作:

lst = [None] * 10

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

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

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

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

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

lst = range(10)

在Python3.x中:

lst = list(range(10))
方梓
2023-03-14

您不能分配给类似lst[i]=something的列表,除非该列表已至少使用i+1元素初始化。您需要使用append将元素添加到列表的末尾。lst.append(something)

(如果使用字典,可以使用赋值表示法)。

正在创建空列表:

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

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

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

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

范围(x)从[0,1,2,...x-1]创建列表

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

使用函数创建列表:

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

列表理解(使用方格,因为对于range您不需要做所有这些,您只需返回range(0,9)):

>>> def display():
...     return [x**2 for x in range(9)]
... 
>>> print display()
[0, 1, 4, 9, 16, 25, 36, 49, 64]
 类似资料:
  • 如何创建一个可以容纳10个元素的空列表? 之后,我想在该列表中分配值。例如: 但是,这会导致<code>索引器:列表分配索引超出范围。为什么? 在Python中,列表没有设置的容量,但不可能分配给尚未存在的元素。这里的答案显示了创建一个包含10个“伪”元素的列表的代码,以便稍后替换。然而,大多数遇到这个问题的初学者实际上只是想通过向列表中添加元素来构建列表。这应该使用方法,尽管通常会有特定于问题的

  • 问题内容: 我想创建一个可以容纳10个元素的空列表(或最好的方法)。 之后,我想在该列表中分配值,例如,应该显示0到9: 但是,当我运行此代码时,它会产生错误,或者在其他情况下,它只会显示(空)。 有人可以解释为什么吗? 问题答案: 你不能分配给类似的列表,除非该列表已至少已使用元素初始化。你需要使用append将元素添加到列表的末尾。。 (如果使用字典,则可以使用分配符号)。 创建一个空列表:

  • 问题内容: 在Python中创建新的空列表的最佳方法是什么? 要么 我之所以这样问是因为两个原因: 技术原因,关于哪个更快。(创建一个类会导致开销吗?) 代码可读性-这是标准约定。 问题答案: 您可以通过以下方法测试哪段代码更快: 但是,实际上,这种初始化很可能只是程序的一小部分,因此担心此初始化可能会出错。 可读性非常主观。我更喜欢,但是像AlexMartelli这样的一些非常博学的人更喜欢,因

  • 问题内容: 在C ++中,我可以创建如下数组: 在python中,我只知道我可以声明一个列表,而不要附加一些项目或类似。 我可以按给定的大小(如c ++)初始化列表,并且不进行任何赋值吗? 问题答案: (tl;博士:您问题的确切答案是或,但您可能不在乎,可以摆脱使用的困扰。) 您可以将列表初始化为所有相同的元素。使用非数字值在语义上有意义(如果使用它会在以后产生错误,这是一件好事)或类似0的值(不

  • 问题内容: 我需要增量填充列表或列表元组。看起来像这样: 为了使它不那么冗长,更优雅,我想我会预先分配一个空列表 预分配部分对我来说并不明显。当我这样做时,我会收到对同一列表的引用列表,因此以下内容的输出 是: 我可以使用循环(),但我想知道是否存在“无环”解决方案。 是获得我想要的东西的唯一方法 问题答案: 这将创建x个不同的列表,每个列表都有一个列表副本(该列表中的每个项目都是通过引用提供的,

  • 问题内容: 我用过PIL 我需要为图像添加边框,并在图像的所有4个面上都设置宽度 问题答案: 这是您需要进行更改以使边框宽度为px数量的内容: 和不做盒子,而是分别为3点和1点。