Python中从列表随机选择元素的方法

Python中从列表随机选择元素的方法

技术背景

在Python编程中,经常会遇到需要从列表中随机选择元素的场景,例如随机生成测试数据、随机选择幸运用户等。Python提供了多种方法来实现这一需求,不同的方法适用于不同的场景。

实现步骤

选择单个元素

  • 使用random.choice():适用于普通的随机选择场景。
1
2
3
4
import random

foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))
  • 使用secrets.choice():适用于需要加密安全的随机选择场景,如生成密码短语。该方法在Python 3.6及以上版本可用。
1
2
3
4
import secrets

foo = ['battery', 'correct', 'horse', 'staple']
print(secrets.choice(foo))
  • 在旧版本Python中使用random.SystemRandom():对于不支持secrets模块的旧版本Python,可以使用random.SystemRandom()来实现加密安全的随机选择。
1
2
3
4
5
import random

secure_random = random.SystemRandom()
foo = ['a', 'b', 'c', 'd', 'e']
print(secure_random.choice(foo))

选择多个元素

  • 使用random.sample():从列表中随机选择指定数量的元素,且元素不会重复。
1
2
3
4
5
6
7
import random
group_of_items = {'a', 'b', 'c', 'd', 'e'}
num_to_select = 2
list_of_random_items = random.sample(group_of_items, num_to_select)
first_random_item = list_of_random_items[0]
second_random_item = list_of_random_items[1]
print(first_random_item, second_random_item)
  • 使用random.choices():从列表中随机选择指定数量的元素,元素可以重复。该方法在Python 3中可用。
1
2
3
4
5
import random
foo = ['a', 'b', 'c', 'd', 'e']
number_of_samples = 2
random_items = random.choices(population=foo, k=number_of_samples)
print(random_items)

使用numpy

如果已经导入了numpy库,也可以使用numpy.random.choice()方法。

1
2
3
4
5
6
7
import numpy as np
foo = ['a', 'b', 'c', 'd', 'e']
# 随机选择单个元素
print(np.random.choice(foo))
# 随机选择多个元素
print(np.random.choice(foo, 3)) # 有放回抽样
print(np.random.choice(foo, 3, replace=False)) # 无放回抽样

获取随机元素的索引

  • 使用random.randrange()
1
2
3
4
from random import randrange
foo = ['a', 'b', 'c', 'd', 'e']
random_index = randrange(len(foo))
print(foo[random_index])
  • 使用secrets.randbelow()
1
2
3
import secrets
foo = ['a', 'b', 'c', 'd', 'e']
print(secrets.randbelow(len(foo)))

移除列表中的随机元素

1
2
3
4
5
6
s = set(range(1, 6))
import random

while len(s) > 0:
s.remove(random.choice(list(s)))
print(s)

核心代码

选择单个元素

1
2
3
import random
foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))

选择多个元素

1
2
3
4
5
import random
group_of_items = {'a', 'b', 'c', 'd', 'e'}
num_to_select = 2
list_of_random_items = random.sample(group_of_items, num_to_select)
print(list_of_random_items)

使用numpy选择元素

1
2
3
import numpy as np
foo = ['a', 'b', 'c', 'd', 'e']
print(np.random.choice(foo))

最佳实践

  • 如果只是进行普通的随机选择,使用random.choice()random.sample()即可。
  • 如果涉及到加密安全的随机选择,如生成密码等,建议使用secrets.choice()
  • 如果已经使用了numpy库,且需要进行随机选择,可以使用numpy.random.choice(),同时还可以通过设置seed来实现可重复的随机选择。

常见问题

  • random.choice()secrets.choice()的区别random.choice()使用的是普通的伪随机数生成器,适用于大多数非安全敏感的场景;secrets.choice()使用的是加密安全的伪随机数生成器,适用于对安全性要求较高的场景。
  • random.sample()random.choices()的区别random.sample()返回的元素不会重复,而random.choices()返回的元素可以重复。
  • 在旧版本Python中如何实现加密安全的随机选择:可以使用random.SystemRandom()类来实现。

Python中从列表随机选择元素的方法
https://119291.xyz/posts/python-randomly-select-element-from-list/
作者
ww
发布于
2025年5月15日
许可协议