首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中创建一个具有特定大小的空列表

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

Stack Overflow用户
提问于 2019-02-28 04:55:56
回答 3查看 0关注 0票数 0

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

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

代码语言:javascript
复制
s1 = list();
for i in range(0,9):
   s1[i] = i

print  s1

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

有人可以解释原因吗?

EN

回答 3

Stack Overflow用户

发布于 2019-02-28 13:23:48

varunl目前接受的答案

代码语言:javascript
复制
 >>> l = [None] * 10
 >>> l
 [None, None, None, None, None, None, None, None, None, None]

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

代码语言:javascript
复制
>>> a = [[]]*10
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
>>> 

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

代码语言:javascript
复制
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)]

示例:

代码语言:javascript
复制
>>> [ [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]]
票数 0
EN

Stack Overflow用户

发布于 2019-02-28 14:13:09

有两种“快速”方法:

代码语言:javascript
复制
x = length_of_your_list
a = [None]*x
# or
a = [None for _ in xrange(x)]

似乎[None]*x更快:

代码语言:javascript
复制
>>> 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])没问题,那么range(x)可能是最快的:

代码语言:javascript
复制
>>> timeit("range(100)",number=10000)
0.012513160705566406
票数 0
EN

Stack Overflow用户

发布于 2020-06-28 17:04:00

用这个嵌套的可以,不仅可以做二维的,多次嵌套可以做三维的

a = [[[] for _ in range(100)] for _ in range(100)]()

type(a[0][0])

list

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档