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

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

之后,我要在该列表中指定值,例如,应该显示0到9:

1

2

3

4

5s1 = list();

for i in range(0,9):

s1[i] = i

print s1

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

有人能解释为什么吗?

在python中将列表初始化为已知数量的元素可能重复

定义为"空列表"([])的元素为零。你显然想要的是一个错误的值列表,比如None、0或''。

要生成从0到9的列表,您应该实际使用for i in range(0, 10),这意味着for (int i = 0, i < 10, i++)。

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

(如果使用字典,可以使用赋值符号)。

创建空列表:

1

2

3>>> l = [None] * 10

>>> l

[None, None, None, None, None, None, None, None, None, None]

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

1

2

3>>> l[1] = 5

>>> l

[None, 5, None, None, None, None, None, None, None, None]

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

范围(X)从[0,1,2,…]创建一个列表。X-1

1

2

3

4# 2.X only. Use list(range(10)) in 3.X.

>>> l = range(10)

>>> l

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

使用函数创建列表:

1

2

3

4

5

6

7

8>>> 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)):

1

2

3

4

5>>> def display():

... return [x**2 for x in range(9)]

...

>>> print display()

[0, 1, 4, 9, 16, 25, 36, 49, 64]

你所说的"你不能分配给像lst[i]=之类的列表"是什么意思?当然可以!您不能做的是分配给当前列表长度之外不存在的元素

"除非列表已经用至少i+1个元素初始化"……

你可以这样做:a = [0 for _ in range(10)]。

试试这个:

1lst = [None] * 10

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

1

2

3lst = [None] * 10

for i in range(10):

lst[i] = i

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

1

2

3lst = []

for i in range(10):

lst.append(i)

或者更好,使用如下列表理解:

1[i for i in range(10)]

另一个好处是可以用默认值初始化列表。lst = [''] * 10或lst = [0] * 10。

理解示例的变体。如果数组中的所有元素在初始化时都需要为空,请使用:arr = [None for _ in range(10)]。

varunl当前接受的答案

1

2

3>>> l = [None] * 10

>>> l

[None, None, None, None, None, None, None, None, None, None]

适用于数字等非引用类型。不幸的是,如果要创建列表列表,则会遇到引用错误。python 2.7.6中的示例:

1

2

3

4

5

6

7>>> a = [[]]*10

>>> a

[[], [], [], [], [], [], [], [], [], []]

>>> a[0].append(0)

>>> a

[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]

>>>

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14def 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)]。

例子:

1

2>>> [ [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]]

我听说使用append经常比列举理解差。您可以通过[ [] for _ in range(10)]创建列表。

上票是因为我疯了,因为我的多维数组重复了几次相同的数据,在最终找到这个答案之前,我不知道发生了什么。^ ^我不明白为什么这里这么低。

您可以在列表中输入.append(element),例如:s1.append(i)。您当前要做的是访问一个不存在的元素(s1[i])。

有两种"快速"方法:

1

2

3

4x = length_of_your_list

a = [None]*x

# or

a = [None for _ in xrange(x)]

似乎[None]*x更快:

1

2

3

4

5>>> 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)可能是最快的:

1

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

0.012513160705566406

我很惊讶没有人建议用这种简单的方法来创建一个空列表列表。这是一个旧的线程,但是为了完整性而添加它。这将创建10个空列表的列表

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

在执行上述操作与执行x = [[]] * 10操作之间最重要的区别是,在后者中,列表中的每个元素都指向相同的列表对象。因此,除非您只需要相同对象的10个副本,否则使用基于range的变体,因为它创建了10个新对象。我发现这种区别非常重要。

(这是根据问题的原始版本编写的。)

I want to create a empty list (or whatever is the best way) can hold 10 elements.

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

but when I run it, the result is []

print display s1不是有效的语法;根据您对所看到的内容的描述,我假设您是指display(s1),然后是print s1。要运行该函数,必须先定义一个全局s1以传递给函数。

调用display不会修改您输入的列表。您的代码说"s1"是传递给函数的任何东西的名称;好的,现在我们要做的第一件事就是完全忘记这个东西,让s1开始引用新创建的list。现在我们将修改那个list。这对您传入的值没有影响。

这里没有理由传入值。(也没有真正的理由去创建一个函数,但这也不重要。)你想要"创建"一些东西,所以这就是你的函数的输出。创建所描述的内容不需要任何信息,因此不要在中传递任何信息。为了得到信息,returnit.

这会给你带来如下好处:

1

2

3

4

5def display():

s1 = list();

for i in range(0, 9):

s1[i] = i

return s1

您将注意到的下一个问题是,您的列表实际上只有9个元素,因为端点被range函数跳过。(旁注,[]和list()一样工作,分号是不必要的,s1是变量的一个不好的名称,如果从0开始,range只需要一个参数),那么最后得到的结果是

1

2

3

4

5def create_list():

result = list()

for i in range(10):

result[i] = i

return result

然而,这仍然缺少标记;range不是某种神奇的关键字,它是语言的一部分,就像for和def一样,但它是一个函数。猜猜这个函数返回了什么?是的-一个整数列表。所以整个函数折叠为

1

2def create_list():

return range(10)

现在你明白了为什么我们根本不需要自己编写函数;range已经是我们要寻找的函数了。尽管如此,也没有必要或理由"预先调整"列表的大小。

我有点惊讶,创建初始化列表的最简单方法不在这些答案中。只需在list功能中使用发电机:

1list(range(9))

下面是我在python中的2d列表代码,它将从输入中读取行数:

1

2

3

4

5

6

7

8

9

10

11empty = []

row = int(input())

for i in range(row):

temp = list(map(int, input().split()))

empty.append(temp)

for i in empty:

for j in i:

print(j, end=' ')

print('')

使用嵌套列表理解创建大小为n的二维矩阵的一种简单方法:

1m = [[None for _ in range(n)] for _ in range(n)]

使其作为一个函数更加可重用。

1

2

3

4

5

6

7

8

9

10def createEmptyList(length,fill=None):

'''

return a (empty) list of a given length

Example:

print createEmptyList(3,-1)

>> [-1, -1, -1]

print createEmptyList(4)

>> [None, None, None, None]

'''

return [fill] * length

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

1

2

3

4

5

6

7import random

numrand=[]

for i in range(0,10):

a = random.randint(1,50)

numrand.append(a)

print(a,i)

print(numrand)

欢迎光临。你的回答并没有具体地解决这个问题。看看stackoverflow.com/help/how-to-answer

我在寻找类似问题时遇到了这个问题。我必须构建一个二维数组,然后用dict中的元素替换每个列表中的一些元素(在二维数组中)。然后我遇到了这个问题,这个问题帮助了我,也许这能帮助其他初学者四处走动。关键技巧是将二维数组初始化为numpy数组,然后使用array[i,j]而不是array[i][j]。

作为参考,这是我必须使用的代码:

1

2

3

4

5

6

7

8

9

10

11

12nd_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循环。希望这能帮助其他遇到这个职位的人。

1

2

3

4

5s1 = []

for i in range(11):

s1.append(i)

print s1

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值