如何在 Python 中从列表中随机选择元素
-
在 Python 中使用模块
random
从列表中选择一个随机元素 -
在 Python 中使用模块
secrets
从列表中选择一个随机的元素 -
在 Python 中使用模块
NumPy
从列表中选择一个随机元素
本教程向你展示了如何在 Python 中从列表中随机选择一个元素。有多种简单的方法来实现这个目标,所有这些方法都涉及到 Python 模块的导入。
本教程将涵盖需要 random
、secrets
和 NumPy
模块的解决方案。
请注意,所有这些将被介绍的解决方案都将使用伪随机数生成器(PRNG)。
在 Python 中使用模块 random
从列表中选择一个随机元素
最常用的随机化模块是 random
模块。这个模块实现了伪随机效用函数来支持涉及随机化的操作。
比方说,我们想从一个列表中随机挑选一个名字,就像投票一样。
['John', 'Juan', 'Jane', 'Jack', 'Jill', 'Jean']
为了从这个列表中挑选出一个随机的名字,我们将使用 random.choice()
,它将从给出的可用数据中选择一个元素。
import random
names = ['John', 'Juan', 'Jane', 'Jack', 'Jill', 'Jean']
def selectRandom(names):
return random.choice(names)
print("The name selected is: ", selectRandom(names))
当然,输出将是可变的、随机的。所以它可以是存储在变量 names
中的六个名字中的任何一个。
在 Python 中使用模块 secrets
从列表中选择一个随机的元素
secrets
模块基本上与 random
用于相同的目的。然而,secrets
提供了一种实现 PRNG 的加密安全方法。
在现实生活中的应用,如存储密码、认证、加密和解密以及令牌。secrets
比使用 random
要安全得多,因为它只适用于模拟或不处理敏感数据的操作。
在这个问题中,这两个模块提供的值是一样的,因为我们没有处理任何敏感数据,是为了模拟。
在这个例子中,我们将使用相同的 names
列表。secrets
也有一个版本的函数 choice()
,它产生的变量输出与 random.choice()
相同。
import secrets
names = ['John', 'Juan', 'Jane', 'Jack', 'Jill', 'Jean']
def selectRandom(names):
return secrets.choice(names)
print("The name selected is: ", selectRandom(names))
在 Python 中使用模块 NumPy
从列表中选择一个随机元素
NumPy
模块也有用于随机化的实用函数,并且有一些扩展性的工具作为其 choice()
函数的参数。
同样,我们将使用相同的列表 names
来演示函数 numpy.random.choice()
。
import numpy
names = ['John', 'Juan', 'Jane', 'Jack', 'Jill', 'Jean']
def selectRandom(names):
return numpy.random.choice(names)
print("The name selected is: ", selectRandom(names))
该函数将返回与其他两个模块产生的变量输出相同。
NumPy
还为 choice()
提供了其他参数,以列表的形式生成多个输出。
第二个参数接受一个整数值来决定返回多少个随机项。假设我们想从列表 names
中返回 4 个随机元素。
def selectRandom(names):
return numpy.random.choice(names, 4)
print("The names selected are: ", selectRandom(names))
样本输出:
The names selected are: ['John', 'Jill', 'Jill', 'Jill']
在随机结果中,同一个元素有可能重复不止一次。
如果你希望结果项是唯一的,我们可以传递第三个 boolean
参数,实现随机抽样而不替换。
def selectRandom(names):
return numpy.random.choice(names, 4, False)
输出示例:
The names selected are: ['Jill', 'John', 'Jack', 'Jean']
该函数将始终产生一个唯一的列表,没有任何重复的元素。
如果我们添加第三个参数,一个主要的缺点是函数的运行时间,因为它会执行一个额外的任务来检查重复的元素,并将其替换为结果中还不存在的元素。
总而言之,从 Python 列表中选择随机项可以通过使用这三个模块之一来实现。random
、secrets
或 NumPy
。每一个模块都有它的优点和缺点。
如果你想拥有一个加密安全的 PRNG 方法,那么 secrets
是最好的模块。如果你的目的只是为了模拟或非敏感的数据操作,那么使用 random
或 NumPy
。如果你想要的结果不止一个随机结果,那么就使用 NumPy
。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn