如何从while循环中存储随机生成的二维列表?

时间:2019-04-15 18:00:05

标签: python

我无法将唯一的1D列表存储到2D列表中。

我无法将多个随机生成的列表存储到2D列表中。我可以生成n个唯一的1D列表,但是当我尝试将它们存储在2D列表中时,我得到的n个相同的1D列表则生成了n次。

我在列表上使用了append()函数,但多次获得相同的一维列表。

我使用了extend()函数,但是它返回一维列表。

我不明白为什么在使用shuffle()函数时该对象被别名。

import random
bd = list(range(10))
rng = random.Random()
rng.shuffle(bd)
d_list = []
number = 0 

while number < 5:
    d_list.append(bd)
    number += 1

print(d_list)

我希望结果是

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

但是结果是

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

4 个答案:

答案 0 :(得分:2)

在您的代码中:

while number < 5:
    d_list.append(bd). #bd is the same and initialized one time
    number += 1

您需要在一段时间内执行随机化器,才能每次真正拥有随机列表。

答案 1 :(得分:1)

将bd的初始化移动到循环中

import random

d_list = []
number = 0

while number < 5:
    bd = list(range(10))
    rng = random.Random()
    rng.shuffle(bd)
    d_list.append(bd)
    number += 1

print(d_list)

现在,您正在改组并将同一列表添加到d_list 5次。在循环中初始化列表意味着您实际上正在创建5个不同的列表。

答案 2 :(得分:1)

要解决您的问题,请在每次迭代时随机播放bd或使用此单行代码生成相同的列表:

d_list = [random.sample(range(10), 10) for i in range(5)]

答案 3 :(得分:0)

似乎您要将相同列表的5倍附加到一个空列表中。结果准确地表明了这一点。

如果您希望在每次迭代时生成一个新的随机列表,我建议将列表改组放在循环内。

import random

bd = list(range(10))
rng = random.Random()
rng.shuffle(bd)
d_list = []
number = 0 

while number < 5:
    rng.shuffle(bd)
    d_list.append(bd)
    number += 1

注意:我还应该使用for循环而不是while info来推荐:

import random

bd = list(range(10))
rng = random.Random()
rng.shuffle(bd)
d_list = []

for range(5):
    rng.shuffle(bd)
    d_list.append(bd)