我想创建一个可以容纳 10 个元素的空列表(或最好的方法)。
之后,我想在该列表中分配值,例如,应该显示 0 到 9:
s1 = list();
for i in range(0,9):
s1[i] = i
print s1
但是,当我运行此代码时,它会产生错误,或者在其他情况下,它仅显示[]
(空)。
有人可以解释为什么吗?
您不能分配给类似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 个元素。
range(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(0,9)
):
>>> def display():
... return [x**2 for x in range(9)]
...
>>> print display()
[0, 1, 4, 9, 16, 25, 36, 49, 64]
尝试以下方法:
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)
甚至更简单,在 Python 2.x 中,您可以执行以下操作以初始化一个值从 0 到 9 的列表:
lst = range(10)
在 Python 3.x 中:
lst = list(range(10))
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]]