python 从数组中随机选择不重复的数字

hrirmatl  于 2023-01-12  发布在  Python
关注(0)|答案(2)|浏览(196)

我想从一个np数组或范围中只选择一次不重复的随机数(例如在for循环中)
我需要一个python函数来完成这个操作。

41zrol4v

41zrol4v1#

我们要做的事情非常简单,可以使用range创建一个这样的整数列表,然后使用sample请求随机值而不进行替换:

from random import sample

# Choose 50 random values from 0 to 99
values = sample(range(100), k = 50)

# Your execution loop
for i in range(50):
    print(values[i])

请注意,提前采样非常重要,因为sample不会修改发送给它的值列表,所以后续调用不能保证不替换。
如果你真的想创建一个可以调用的函数,你可以使用生成器来使它工作:

# Function that creates a generator that will yield sampled values one at a time
def create_non_replacement_sample(inputs, k):
    values = sample(inputs, k)
    def inner():
        for v in values:
            yield v
    return inner

# Create the generator to sample 50 values between 0 and 99
sampler = create_non_replacement_sample(range(100), 50)

# Execution loop
for i in range(50):
    
    # Get a random value without replacement
    value = next(sampler())

    # Print the value
    print(value)

这是通过提前生成值,然后返回一个函数,一个接一个地返回这些值来实现的。然后,在执行循环中,您可以调用next来从结果集中获取一个随机值。注意,这里,每次调用next实际上都会递增到列表中的下一个值,因此只有在需要新值时才应该调用next

knpiaxh1

knpiaxh12#

import numpy as np
arr = np.array([1,2,3,4,5])
np.random.choice(arr)

相关问题