【发布时间】:2015-03-03 21:44:33
【问题描述】:
我有一个清单:
a = [1,2,1,1,3,5,6,2]
我想从这个列表中随机选择 3 个元素,但 它们必须都不同。
我需要保留每个元素的“权重”,因此无法从 set(a) 采样。
到目前为止,我的解决方案是:
while condition == False:
mysample = random.sample(a, 3)
if len(set(mysample)) - len(mysample) !=0:
condition = False
else:
condition = True
但这迫使我重新采样尽可能多的元素,以使元素都不同。这适用于小样本,但对于大样本,我的代码变得非常低效......
【问题讨论】:
-
如果你给它一个包含重复项的列表,它可以返回重复项。 OP 想要一个没有重复但仍然加权的列表,这样更常见的元素比不太常见的元素更有可能出现。
-
@aruisdante
random.sample(a, 3)在我的机器上产生了[1, 1, 6]。它返回列表中三个1s 中的两个。 -
sample 1,然后删除原始列表中所有出现的那个。重复直到您拥有所需数量的元素。看看这里:stackoverflow.com/questions/1157106/…
-
@JohnKugelman 啊等等,他们后来确实说这是基于索引的唯一性,而不是价值。他们没有很好地强调这一点。我的错。
标签: python list select random weighted