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下利用OpenCV来旋转图像的教程
Apr 16 Python
Python使用multiprocessing创建进程的方法
Jun 04 Python
在Python中定义和使用抽象类的方法
Jun 30 Python
Django学习笔记之Class-Based-View
Feb 15 Python
pandas多级分组实现排序的方法
Apr 20 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
python爬虫自动创建文件夹的功能
Aug 01 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
python字典的setdefault的巧妙用法
Aug 07 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
Python 远程开关机的方法
Nov 18 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一些服务器端特性的配置加强php的安全
2006/10/09 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
10个简化PHP开发的工具
2014/12/25 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
React+react-dropzone+node.js实现图片上传的示例代码
2017/08/23 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
python有证书的加密解密实现方法
2014/11/19 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
python web框架 django wsgi原理解析
2019/08/20 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
浅析Python3 pip换源问题
2020/01/06 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
写自荐信有哪些不宜?
2013/10/17 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
Python字符串的转义字符
2022/04/07 Python