Python从列表中随机选择N个元素

在 Python 中从 List 中随机选择 N 个元素

Randomly select N elements from a List in Python

使用该random.sample()方法从列表中随机选择 N 个元素,例如random_elements = random.sample(a_list, N)random.sample()方法返回从提供的列表中选择的 N 个唯一元素的列表。

主程序
import random a_list = ['bobby', 'hadz', '.', 'com', 'a', 'b', 'c'] random_elements = random.sample(a_list, 3) print(random_elements) # 👉️ ['hadz', 'b', '.'] print(random.sample(a_list, 2)) # 👉️ ['.', 'com'] print(random.sample(a_list, 3)) # 👉️ ['hadz', 'c', 'b'] print(random.sample(a_list, 1)) # 👉️ ['bobby']

random.sample
方法返回从提供的序列中选择的 N 个唯一元素的列表

该方法采用的第一个参数是一个序列,第二个参数是要返回的随机元素的数量。

如果您的列表包含重复项并且您只需要唯一的随机元素,请将列表转换为set对象。
主程序
import random a_list = [1, 1, 1, 1, 2, 2, 2, 3, 4, 5, 6, 7] random_elements = random.sample(list(set(a_list)), 3) print(random_elements) # 👉️ [2, 6, 4] print(random.sample(a_list, 2)) # 👉️ [2, 6] print(random.sample(a_list, 3)) # 👉️ [6, 3, 2] print(random.sample(a_list, 1)) # 👉️ [2]

我们使用set()该类从列表中删除所有重复元素。

在较新的 Python 版本中random.sample()无法使用 a 调用该方法,因此我们使用该类将其转换回列表。setlist()set

如果使用numpy,您还可以使用该numpy.random.choice()方法从列表中随机选择 N 个元素。

主程序
import numpy as np a_list = ['bobby', 'hadz', '.', 'com', 'a', 'b', 'c'] random_elements = np.random.choice(a_list, 3, replace=False) print(random_elements) # 👉️ ['hadz' 'a' '.'] random_elements = np.random.choice(a_list, 3, replace=False).tolist() print(random_elements) # 👉️ ['a', 'bobby', 'hadz']

numpy.random.choice
方法从给定的类数组
对象
生成随机样本。

replace参数确定是否可以多次选择类数组对象的值。参数默认为True.

或者,您可以使用该random.shuffle()方法。

使用 random.shuffle() 从列表中随机选择 N 个元素

从列表中随机选择 N 个元素:

  1. 使用random.shuffle()方法对列表进行洗牌。
  2. 使用列表切片从打乱后的列表中选择 N 个元素。
主程序
import random a_list = ['bobby', 'hadz', '.', 'com', 'a', 'b', 'c'] list_copy = a_list.copy() random.shuffle(list_copy) print(list_copy[:3]) # 👉️ ['com', '.', 'b']

random.shuffle
方法接受一个序列并将

随机播放。

我们使用该list.copy()方法对列表的副本进行洗牌。

random.shuffle()但是,如果您不需要保留原始列表,则可以将其传递给该方法。

最后一步是使用列表切片从打乱后的列表中选择 N 个元素。

列表切片的语法是my_list[start:stop:step].

start索引是包含的,索引stop是排他的(最多,但不包括)。

如果start省略索引,则认为是0,如果stop省略索引,则切片转到列表的末尾。

Python 索引是从零开始的,因此列表中的第一项的索引为0,最后一项的索引为-1len(my_list) - 1

或者,您可以使用secrets.SystemRandom()该类。

使用 secrets.SystemRandom() 从列表中随机选择 N 个元素#

从列表中随机选择 N 个元素:

  1. 使用secrets.SystemRandom类创建SystemRandom对象。
  2. 使用该sample()方法从列表中随机选择 N 个元素。
主程序
import secrets a_list = ['bobby', 'hadz', '.', 'com', 'a', 'b', 'c'] secure_random = secrets.SystemRandom() list_of_random_items = secure_random.sample(a_list, 3) print(list_of_random_items) # 👉️ ['com', 'a', 'hadz']

secrets
模块用于为密码、安全令牌等生成加密强随机数

secrets.SystemRandom类返回一个对象,该

对象用于使用操作系统提供的源生成随机数。

对象sample()random模块一样实现方法。

如果您需要生成用于管理密码和安全令牌的随机数,这应该是您的首选方法。