Python随机数random不要重复

介绍

在编程中,经常会用到随机数来模拟真实世界的随机性或者进行随机选择。Python内置的random库提供了生成随机数的函数,但有时我们需要确保生成的随机数不重复,以避免重复使用同一个随机数导致结果的不准确性。本文将介绍如何使用Python的随机数模块random生成不重复的随机数。

随机数生成器

Python的随机数模块random提供了多种生成随机数的函数。其中,常用的有random()randint(a, b)choice(sequence)

  • random()函数生成一个[0, 1)范围内的随机浮点数。
  • randint(a, b)函数生成一个[a, b]范围内的随机整数。
  • choice(sequence)函数从给定的序列中随机选择一个元素。

这些函数在需要随机数时非常有用,但如果需要生成多个不重复的随机数,上述函数并不能满足需求。

随机数种子

为了生成不重复的随机数,我们需要设置随机数的种子。种子是一个整数,当种子相同时,生成的随机数序列也会相同。通过调用seed(x)函数,可以设置随机数种子为x。

下面是一个使用种子生成随机数的示例:

import random

random.seed(42)
print(random.random())
print(random.randint(1, 10))
print(random.choice(['apple', 'banana', 'orange']))

输出结果:

0.6394267984578837
6
orange

当种子设置为42时,每次运行上述代码,输出的随机数序列都是相同的。

生成不重复的随机数序列

要生成不重复的随机数序列,我们可以使用sample(population, k)函数。该函数从给定的序列中随机选择k个元素,并返回一个新的列表。

下面是一个使用sample()函数生成不重复随机数序列的示例:

import random

random.seed(42)
numbers = range(1, 11)
random_numbers = random.sample(numbers, 5)
print(random_numbers)

输出结果:

[8, 2, 1, 7, 4]

在上述代码中,我们使用range(1, 11)生成1到10的序列,然后使用sample()函数从中选择5个随机数。由于设置了种子为42,每次运行代码,生成的随机数序列都是相同的。

生成不重复的随机数序列并打乱顺序

有时候我们需要生成不重复的随机数序列,并且希望每次生成的顺序都不一样。为了实现这个需求,我们可以先生成不重复的随机数序列,然后使用shuffle(sequence)函数打乱顺序。

下面是一个使用sample()函数生成不重复随机数序列并打乱顺序的示例:

import random

random.seed(42)
numbers = range(1, 11)
random_numbers = random.sample(numbers, 5)
random.shuffle(random_numbers)
print(random_numbers)

输出结果:

[7, 8, 2, 4, 1]

在上述代码中,我们先使用sample()函数生成5个不重复的随机数,然后使用shuffle()函数打乱顺序。由于设置了种子为42,每次运行代码,生成的随机数序列都是相同的,但顺序会不同。

总结

通过使用Python的random模块,我们可以生成不重复的随机数序列。首先,我们需要设置随机数的种子,然后使用sample()函数从给定的序列中选择不重复的随机数。如果需要每次生成的序列顺序都不同,可以再使用shuffle()函数打乱顺序。

关系图

erDiagram
    RANDOM --|> SAMPLE
    RANDOM --|> SHUFFLE