如何从以下列表中随机检索项目?
foo = ['a', 'b', 'c', 'd', 'e']
如何从以下列表中随机检索项目?
foo = ['a', 'b', 'c', 'd', 'e']
当前回答
NumPy解决方案:NumPy.random.ochoice
对于这个问题,它的工作原理与接受的答案(import random;random.choice())相同,但我添加了它,因为程序员可能已经(像我一样)导入了NumPy
此外,这两种方法之间也存在一些差异,可能与您的实际用例有关。
import numpy as np
np.random.choice(foo) # randomly selects a single item
为了再现性,您可以执行以下操作:
np.random.seed(123)
np.random.choice(foo) # first call will always return 'c'
对于作为数组返回的一个或多个项目的示例,请传递size参数:
np.random.choice(foo, 5) # sample with replacement (default)
np.random.choice(foo, 5, False) # sample without replacement
其他回答
简而言之,使用random.sample方法
示例方法返回一个新列表,其中包含总体中的元素,而保持原始总体不变。结果列表按选择顺序排列,因此所有子切片也将是有效的随机样本。
import random
lst = ['a', 'b', 'c', 'd', 'e']
random.seed(0) # remove this line, if you want different results for each run
rand_lst = random.sample(lst,3) # 3 is the number of sample you want to retrieve
print(rand_lst)
Output:['d', 'e', 'a']
这是运行代码https://onecompiler.com/python/3xem5jjvz
我们也可以使用randint来实现这一点。
from random import randint
l= ['a','b','c']
def get_rand_element(l):
if l:
return l[randint(0,len(l)-1)]
else:
return None
get_rand_element(l)
如何从列表中随机选择项目?假设我有以下列表:foo=[‘a’,‘b’,‘c’,‘d’,‘e’]从列表中随机检索项目的最简单方法是什么?
如果你想接近真正的随机,那么我建议你从标准库中选择secrets.choice(Python 3.6中的新功能):
>>> from secrets import choice # Python 3 only
>>> choice(list('abcde'))
'c'
以上内容相当于我以前的建议,使用随机模块中的SystemRandom对象和choice方法-在Python 2中早期可用:
>>> import random # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
现在:
>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'
如果要进行确定性伪随机选择,请使用choice函数(实际上是随机对象上的绑定方法):
>>> random.choice
<bound method Random.choice of <random.Random object at 0x800c1034>>
这看起来是随机的,但实际上不是,如果我们重复重新播种,我们可以看到:
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
评论:
这与random.choice是否真正随机无关。如果你修复了种子,你会得到可重复的结果——这就是种子的设计目的。你也可以将种子传递给SystemRandom。sr=随机.SystemRandom(42)
是的,你可以给它传递一个“种子”参数,但你会看到SystemRandom对象只是忽略了它:
def seed(self, *args, **kwds):
"Stub method. Not used for a system random number generator."
return None
你可以:
from random import randint
foo = ["a", "b", "c", "d", "e"]
print(foo[randint(0,4)])
NumPy解决方案:NumPy.random.ochoice
对于这个问题,它的工作原理与接受的答案(import random;random.choice())相同,但我添加了它,因为程序员可能已经(像我一样)导入了NumPy
此外,这两种方法之间也存在一些差异,可能与您的实际用例有关。
import numpy as np
np.random.choice(foo) # randomly selects a single item
为了再现性,您可以执行以下操作:
np.random.seed(123)
np.random.choice(foo) # first call will always return 'c'
对于作为数组返回的一个或多个项目的示例,请传递size参数:
np.random.choice(foo, 5) # sample with replacement (default)
np.random.choice(foo, 5, False) # sample without replacement