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 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
python字符串替换re.sub()方法解析
Sep 18 Python
python实现飞船游戏的纵向移动
Apr 24 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
python tkinter实现连连看游戏
Nov 16 Python
python制作微博图片爬取工具
Jan 16 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 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
8个PHP数组面试题
2015/06/23 PHP
Javascript学习笔记2 函数
2010/01/11 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
js 数据类型转换总结笔记
2011/01/17 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
对Python模块导入时全局变量__all__的作用详解
2019/01/11 Python
详解python中的hashlib模块的使用
2019/04/22 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
利用python实现逐步回归
2020/02/24 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
德国团购网站:Groupon德国
2018/03/13 全球购物
自我鉴定书范文
2013/10/02 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis
Javascript 解构赋值详情
2021/11/17 Javascript