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

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

import random

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

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

随机取的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的差集
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这个不错分享给大家,从扣上看到的,就转过来了 《电脑专业英语》 file [fail] n. 文件;v. 保存文...
    麦子先生R阅读 6,610评论 5 24
  • 婆婆早年是小学老师,教数学,曾当过脑残叔的班主任。脑残叔说,小时候他很怕婆婆,因为婆婆总是很凶,经常因为他调皮而打...
    丢了朵朵阅读 711评论 4 7
  • 我的梦想 好像只有读书时才谈过梦想,都是当科学家,老师,医生等等,我己经不记得小时候的梦想了肯定也是这一类吧,哈哈...
    沙仑中的玫瑰阅读 114评论 0 0