如何在 Python 中从列表中随机选择元素

Rayven Esplanada 2023年1月30日 2020年11月7日
  1. 在 Python 中使用模块 random 从列表中选择一个随机元素
  2. 在 Python 中使用模块 secrets 从列表中选择一个随机的元素
  3. 在 Python 中使用模块 NumPy 从列表中选择一个随机元素
如何在 Python 中从列表中随机选择元素

本教程向你展示了如何在 Python 中从列表中随机选择一个元素。有多种简单的方法来实现这个目标,所有这些方法都涉及到 Python 模块的导入。

本教程将涵盖需要 randomsecretsNumPy 模块的解决方案。

请注意,所有这些将被介绍的解决方案都将使用伪随机数生成器(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 列表中选择随机项可以通过使用这三个模块之一来实现。randomsecretsNumPy。每一个模块都有它的优点和缺点。

如果你想拥有一个加密安全的 PRNG 方法,那么 secrets 是最好的模块。如果你的目的只是为了模拟或非敏感的数据操作,那么使用 randomNumPy。如果你想要的结果不止一个随机结果,那么就使用 NumPy

Rayven Esplanada avatar Rayven Esplanada avatar

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

相关文章 - Python List