我需要从列表中挑出"x"个非重复的随机数.例如:
all_data = [1, 2, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 11, 12, 13, 14, 15, 15]
Run Code Online (Sandbox Code Playgroud)
我如何选择一个喜欢[2, 11, 15]和不喜欢的列表[3, 8, 8]?
我正在尝试编写一种算法,该算法可以随机地从序列中选择N个不同的项目,而不需要事先知道序列的大小,并且在不止一次迭代序列的情况下进行迭代是很昂贵的.例如,序列的元素可能是一个巨大文件的行.
我在N = 1时找到了一个解决方案(也就是说,当试图从一个巨大的序列中随机选择一个元素时):
import random
items = range(1, 10) # Imagine this is a huge sequence of unknown length
count = 1
selected = None
for item in items:
if random.random() * count < 1:
selected = item
count += 1
Run Code Online (Sandbox Code Playgroud)
但是如何才能为其他N值(比如N = 3)实现同样的目的呢?
有没有更好的方法从列表中选择两个不同的元素?
foo = ['1','a','3','f','ed']
elt1 = random.choice(foo)
elt2 = random.choice(foo)
while elt2 == elt1:
elt2 = random.choice(foo)
Run Code Online (Sandbox Code Playgroud) 我正在寻找从一组中选择一个项目。不管是哪个项目,但是每次函数调用时我都希望它是相同的项目。
例如,如果我有设置:
my_set = set(["ABC","ABC inc", "ABC ltd"])
Run Code Online (Sandbox Code Playgroud)
然后,我想返回其中任何一个,但只要运行该函数,就返回相同的一个。[即我每次使用上述设置运行时,我总是会得到“ ABC”,或者总是得到“ ABC inc”。]如果我使用列表,我只会拿第一个项目,但是set本身没有第一个项目。
这与选择“随机”形成对比(例如,如何从Python集中选择2个随机项?]它将在每次运行时更改。