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操作CouchDB的方法
Oct 08 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
用Python实现KNN分类算法
Dec 22 Python
Python3实现购物车功能
Apr 18 Python
Python实现获取前100组勾股数的方法示例
May 04 Python
Python设计模式之外观模式实例详解
Jan 17 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 Python
python实现文件分片上传的接口自动化
Nov 19 Python
python3字符串输出常见面试题总结
Dec 01 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
我的论坛源代码(二)
2006/10/09 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
python3.8下载及安装步骤详解
2020/01/15 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
公司年会主持词
2014/03/22 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
世界遗产导游词
2015/02/13 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL