这与随机抽样有关。我使用random.sample(number,5)从数字中包含的数字范围内返回随机数列表。我正在使用,而我< 100返回100组五个数字。要检查重复项,我正在使用:
if len(numbers) != len(set(numbers)):
识别具有重复项的集合,然后使用random.sample(number,5)来尝试进行另一次随机化以替换具有重复项的集合。我似乎得到了大约8%的重新随机化(使用print语句来说明哪个数字是重复的),但似乎错过了大约5%。我做错了什么?实际代码如下:
while i < 100:
set1 = random.sample(numbers1,5)
if len(set1) != len(set(set1))
print('duplicate(s) found, random selection repeated')
set1 = random.sample(numbers1,5)
在另一个例程中,我试图像上面那样做,但是通过添加相同的set2来替换set2来搜索两组中的重复项。这给出了相同类型的失败。 set2例程缩进并紧接在上面的例程下面。虽然我&lt; 100:对于set2不重复。 我希望我已经清楚地解释了我的问题!!
答案 0 :(得分:0)
你提供的代码显然有一些空白,并且不能正常工作,所以我无法确定你的错误究竟在哪里,但在set1 = random.sample(numbers1,5)
循环结束后运行while
(如果在你的问题中写的那么是无限的)撤消你之前做的所有事情,因为它会覆盖你设法设置set1
的任何内容。
无论如何,random.sample
应该为您提供无需替换的样本。如果您在random.sample(numbers1, 5)
中有任何重复,则意味着您已经在numbers1
中重复了。如果不是这种情况,您应该检查numbers1
的内容,并可能强制它包含所有内容,例如使用set(numbers1)
代替。
如果原因是您希望numbers1
中的某些元素具有更高的概率,则可能需要将其设置为
set1 = random.sample(numbers1, 5)
while len(set1) != len(set(set1)):
set1 = random.sample(numbers1, 5)
这可能是无限循环,但如果numbers1
包含至少5个不同的元素,它将在某个时刻退出循环。如果你不喜欢这个循环从不退出的理论可能性,你应该使用加权样本而不是random.sample
,(这里有一些如何在stackoverflow上做这个的例子)并删除你的数字已经从权重表中选择了。