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中的对象拷贝示例 python引用传递
Jan 23 Python
初学Python实用技巧两则
Aug 29 Python
python中的多重继承实例讲解
Sep 28 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
Python标准库inspect的具体使用方法
Dec 06 Python
Python实现的多项式拟合功能示例【基于matplotlib】
May 15 Python
python编辑用户登入界面的实现代码
Jul 16 Python
Python 实现域名解析为ip的方法
Feb 14 Python
详解python使用turtle库来画一朵花
Mar 21 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
Python threading的使用方法解析
Aug 28 Python
Python如何优雅获取本机IP方法
Nov 10 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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
PHP 加密解密内部算法
2010/04/22 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
php简单获取复选框值的方法
2016/05/11 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
Aptana调试javascript图解教程
2009/11/30 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
js数组去重的方法总结
2019/01/18 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
详解JavaScript中的坐标和距离
2019/05/27 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
python 编写简单网页服务器的实例
2018/06/01 Python
Python根据已知邻接矩阵绘制无向图操作示例
2018/06/23 Python
想学python 这5本书籍你必看!
2018/12/11 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python多线程实现TCP服务端
2019/09/03 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
项目开发计划书
2014/01/09 职场文书
音乐幼师求职信
2014/07/09 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
八项规定整改方案
2014/10/01 职场文书
写给老师的保证书
2015/05/09 职场文书
结婚典礼致辞
2015/07/28 职场文书