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 相关文章推荐
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
Jun 07 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
python设置值及NaN值处理方法
Jul 03 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
Jul 04 Python
python3.7 的新特性详解
Jul 25 Python
Django对models里的objects的使用详解
Aug 17 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
Apr 08 Python
使用pytorch实现论文中的unet网络
Jun 24 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 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
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
Python中Class类用法实例分析
2015/11/12 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
使用python求斐波那契数列中第n个数的值示例代码
2020/07/26 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
远东集团网络工程师面试题
2014/10/20 面试题
交通安全温馨提示语
2015/07/14 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
大学生创业计划书常用模板
2019/08/07 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python