使用while循环打印不重复的随机数

时间:2019-12-28 20:28:43

标签: python

我正在处理以下内容:

list1 = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]
list2 = ["l", "m", "n", "o", "p", "q", "r"]
list3 = ["s", "t", "u", "v", "w", "x", "y", "z"]

sections = 3
start = 0

while start < sections:
        print(random.sample(list1, k=1))
        print(random.sample(list2, k=1))
        print(random.sample(list3, k=1))
        start = start + 1

理想情况下,我想得到这样的东西:

['a', 'n', 'z']
['c', 'm', 'v']
['k', 'q', 'y']

每个列表中的字符串可以更长或更短,具体取决于相关输入“ sections”变量也可以变化,因此它们都不是静态的。

2 个答案:

答案 0 :(得分:4)

如果要保证元素唯一,可以首先从每个列表中抽取k = sections个元素的样本,然后zip对其进行采样:

from random import sample

list1 = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]
list2 = ["l", "m", "n", "o", "p", "q", "r"]
list3 = ["s", "t", "u", "v", "w", "x", "y", "z"]

data = [list1, list2, list3]
sections = 3
chosen = [sample(lst, sections) for lst in data]
out = list(zip(*chosen))
print(out)
# [('h', 'q', 't'), ('a', 'l', 'x'), ('j', 'o', 'z')]

,如果您真的想要列表而不是元组:

out = [list(tup) for tup in out]
print(out)
# [['h', 'q', 't'], ['a', 'l', 'x'], ['j', 'o', 'z']]

答案 1 :(得分:0)

您可以从列表中选择元素,然后将其删除,因此,如果您要跟踪已删除的元素,请不要再选择它,请使用同一列表的2个副本,一个主副本和一个副本,其中您可以删除元素。

相关问题