python生成不重复随机数和对list乱序的解决方法


Posted in Python onApril 09, 2018

andom.sample(list, n)即是从list中随机选取n个不同的元素

# -*- coding: utf-8 -*- 
import random 
# 从一个list中随机挑选5个 
list = [12, 23, 13, 14, 78, 234, 123, 12345] 
randomlist = random.sample(list, 5) 
print randomlist 
 
# 在range(10)中随机生成5个不重复的数,可以作为随机下标集合,然后到list中取数 
len = list.__len__() 
indexList = range(len) 
randomIndex = random.sample(indexList, 5) 
for i in randomIndex: 
 print "下标为%d" % i 
 print list[i]

对list进行洗牌,乱序排序,random.shuffle(list),注意原来的list会被改变

# -*- coding: utf-8 -*- 
import random 
# 对list洗牌,在原list上做改变 
list = range(10) 
print list 
random.shuffle(list) 
print "随机排序列表 : ", list

关于生成随机的不重复数,我被面试过两次,有一次的应用场景是抽奖。

我当时提出的解决方案是:将生成的随机数(数组的随机下标)放在一个数组中,每次对新生成的随机数首先判断是否已经存在,如果不存在就加入这个数组,如果存在就重新生成随机数,直到这个数组中的元素个数到达一个特定值,然后拿着这个随机下标数组到原数组中去取元素。面试官问我时间复杂度问我是多少,我说O(n^2),面试官问我有没有改进方案,我想了一会没想出来。

回到宿舍后舍友说,你可以每次对选中的元素和最后元素交换以下,下一次生成随机数的时候就在前n-1个元素中生成,这样每次只要交换一次元素,就不用去那个数组中判断当前下标是否已经被生成过一次,时间复杂度变成O(n),不由佩服。

Java中提供了list.contains(ele)函数,可以直接判断指定容器中是否存在某个元素,这样就不用写二重循环了,但是时间复杂度仍然是O(n^2)

不过今天看了一下python中的sample函数(随机选取种子点)直接就能达到我要的结果,下次再写抽奖函数一行代码就搞定了。

以上这篇python生成不重复随机数和对list乱序的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
状态机的概念和在Python下使用状态机的教程
Apr 11 Python
老生常谈Python基础之字符编码
Jun 14 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
python 利用文件锁单例执行脚本的方法
Feb 19 Python
详解python中递归函数
Apr 16 Python
python集合的创建、添加及删除操作示例
Oct 08 Python
Python configparser模块应用过程解析
Aug 14 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
python实现三次密码验证的示例
Apr 29 Python
python关于集合的知识案例详解
May 30 Python
解决Python的str强转int时遇到的问题
Apr 09 #Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 #Python
Python序列循环移位的3种方法推荐
Apr 09 #Python
python中将一个全部为int的list 转化为str的list方法
Apr 09 #Python
python修改list中所有元素类型的三种方法
Apr 09 #Python
python 获取list特定元素下标的实例讲解
Apr 09 #Python
pandas.DataFrame 根据条件新建列并赋值的方法
Apr 08 #Python
You might like
实用函数9
2007/11/08 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
js操作浏览器的参数方法
2017/01/21 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
Python 多线程Threading初学教程
2017/08/22 Python
python3调用R的示例代码
2018/02/23 Python
python实现大文本文件分割
2019/07/22 Python
python中如何进行连乘计算
2020/05/28 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
家长给小学生的评语
2014/01/30 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
Python中的tkinter库简单案例详解
2022/01/22 Python
Python装饰器详细介绍
2022/03/25 Python