我正在处理以下内容:
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”变量也可以变化,因此它们都不是静态的。
答案 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个副本,一个主副本和一个副本,其中您可以删除元素。