Python - Shuffle然后扩展列表



我有一个程序,它从用户那里获取三个值:minimum、maximum和sets。程序然后打乱值的范围之间的最小和最大并打印每个值在一个单独的行。例如,如果用户输入1和5,数字1、2、3、4和5将被洗牌,并且每个数字将被打印在自己的行上。我想重复这个过程的次数用户指定的"设置"值。如果'sets' = 2,我想洗牌第一个集合(例如,1,5,3,2,4),洗牌第二个集合(3,2,1,5,4),将第二个集合扩展到第一个集合(例如,1,5,3,2,4,3,2,1,5,4),然后在自己的行上打印每个数字。下面的代码用于生成一组值,但无论'sets'的值是什么,都只生成一组值。

import random
a = 1
b = 5
c = 2
d = []
x = 0
e = list(range(a, b+1))
while x < c:
random.shuffle(e)
for i in e:
print(e[x])
d.extend([e])
x+=1

random.shuffle()将列表打乱。这意味着该函数不返回任何东西,这使得它比只使用random.sample()更不方便。医生是这样说的:

要对不可变序列进行洗牌并返回一个新的洗牌列表,请使用sample(x, k=len(x))代替。

要创建一个顺序排列的列表,你可以这样做:

from random import sample
e = list(range(1, 6))
num = 2
numbers = [n for _ in range(num) for n in sample(e, k=len(e))]
# [1, 4, 3, 2, 5, 5, 3, 2, 1, 4] (or similar)

这不是技术上的重新洗牌,但是如果这个过程接近随机,结果应该是无法区分的。

最新更新