gpt4 book ai didi

python - Python中的二维列表重复随机数赋值

转载 作者:太空宇宙 更新时间:2023-11-04 07:27:49 24 4
gpt4 key购买 nike

抱歉,我确信这个问题以前出现过,但似乎没有一个例子适用。

我正在尝试创建一个二维列表(4 x 100),它在每一行的不同范围内分配随机值。

import random
size_of_meadow = 100
no_of_flowers = 100
no_of_flower_types = 3

flower = [[0] * 5] * no_of_flowers

for row in range(no_of_flowers):
flower[row][0] = random.randint(0, size_of_meadow - 1) # x coord
flower[row][1] = random.randint(0, size_of_meadow - 1) # y coord
flower[row][2] = random.randint(1, no_of_flower_types)
if random.randint(0, 100) < 5:
flower[row][3] = 1
else:
flower[row][3] = 0

print(flower[0][0])
print(flower[0][1])
print(flower[0][2])
print(flower[0][3])
print(" ")
print(flower[1][0])
print(flower[1][1])
print(flower[1][2])
print(flower[1][3])
# Sorry the above isn't in a for loop

输出只是为二维列表的每一行显示相同的一组数字...

输出:

29
21
2
0

29
21
2
0

我是 python 的新手,我知道我一定遗漏了一些基本的东西,但经过大量的思考和啊哈之后我还没有弄清楚,任何帮助都将不胜感激。

谢谢

最佳答案

通过使用 [[0] * 5] * no_of_flowers,您将创建 100 个对同一列表的引用。这意味着内存中只有ONLY ONE ROW

当您修改一行时,如果影响内存中的行,并且由于所有其他“行”引用它,它们将简单地使用内存中的最新列表。

要避免这种情况,您可以使用:

flower = [[0 for _ in range(5)] for _ in range(no_of_flowers)]

你可以找到一个 example and explanation in wtfpython :

# Let's initialize a row
row = [""]*3 #row i['', '', '']
# Let's make a board
board = [row]*3

输出:

>>> board
[['', '', ''], ['', '', ''], ['', '', '']]
>>> board[0]
['', '', '']
>>> board[0][0]
''
>>> board[0][0] = "X"
>>> board
[['X', '', ''], ['X', '', ''], ['X', '', '']]

解释:

当我们初始化 row 变量时,这个可视化解释了内存中发生的事情。

enter image description here

board 通过乘以 row 进行初始化时,这就是内存中发生的事情(每个元素 board[0]board[1]board[2] 是对 row 引用的同一列表的引用)

enter image description here

我们可以通过不使用row 变量来生成board 来避免这种情况。 (在 this 问题中提出)。

>>> board = [['']*3 for _ in range(3)]
>>> board[0][0] = "X"
>>> board
[['X', '', ''], ['', '', ''], ['', '', '']]

关于python - Python中的二维列表重复随机数赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55262858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com