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中使用base64模块来处理base64编码的方法
Jul 01 Python
Python中按键来获取指定的值
Mar 02 Python
python3对拉勾数据进行可视化分析的方法详解
Apr 03 Python
代码实例讲解python3的编码问题
Jul 08 Python
手写一个python迭代器过程详解
Aug 27 Python
python动态视频下载器的实现方法
Sep 16 Python
Tensorflow的梯度异步更新示例
Jan 23 Python
Python类继承和多态原理解析
Feb 05 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
Apr 01 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
基于python实现简单网页服务器代码实例
Sep 14 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 静态化实现代码
2009/03/20 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
AngualrJS中的Directive制作一个菜单
2016/01/26 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
Python正则表达式介绍
2012/08/06 Python
python实现批量下载新浪博客的方法
2015/06/15 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
园林资料员岗位职责
2013/12/30 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
2015年七七事变78周年纪念活动方案
2015/05/06 职场文书
大学生读书笔记大全
2015/07/01 职场文书
社团招新宣传语
2015/07/13 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫