如何从Python集中选择2个随机项?

Thi*_*Lam 145 python random

我目前有一个n大小的Python集,其中n> = 0.是否有快速的1或2行Python解决方案来做到这一点?例如,该集合将如下所示:

fruits = set(['apple', 'orange', 'watermelon', 'grape'])
Run Code Online (Sandbox Code Playgroud)

目标是从上面选择2个随机项目,上述集合可能包含0个,1个或更多项目.我能想到的唯一方法是将集合转换为列表(可变),从中可以访问集合长度内的2个随机唯一索引.

Joh*_*kin 304

使用random模块:http://docs.python.org/library/random.html

import random
random.sample(set([1, 2, 3, 4, 5, 6]), 2)
Run Code Online (Sandbox Code Playgroud)

这样可以对两个值进行采样而无需替换(因此两个值不同).

  • 值得注意的是,在内部,这会将集合转换为列表或元组(取决于集合和样本的大小),然后运行采样过程.例如,它不会运行[水库采样](http://en.wikipedia.org/wiki/Reservoir_sampling)或其他一些适用于不可索引的集合的算法. (17认同)
  • 你应该提一下这是一个随机选择,有或没有替代 (7认同)
  • 考虑在您的示例中使用一个集合.问题明确要求一个集合(例如,不能传递给`random.choice()`所以我会说它会改进答案. (4认同)