[Python] 从m个数中随机取n个

随机取的n个数字可以重复

import random

[random.randint(0,m) for _ in range(n)]

这样取出来的数字是有可能重复的,并且允许 m 的情况

随机取的n个数字不可以重复

import random

def get_random_list_without_repetition(m, n):
    results=[]
    while(len(results) < n)
        s = random.randint(0, m)
        if s not in results:
            results.append(s)
    return results

这个的缺点是可能效率并不高,当m与n接近时,可能会消耗大量时间,一直找不到合适的s

两个小想法

  1. 可以尝试,每找到一个数,就将这个数从原list中删除,然后重新randint
  2. 当m接近n时,效率会极大的降低,可以加一个预判
if n < m/2:
    get_random_list_without_repetition(m, n)
else:
    get_random_list_without_repetition(m, m-n)
    再求两个list的差集

你可能感兴趣的:([Python] 从m个数中随机取n个)