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获取apk文件URL地址实例
Nov 01 Python
Python实现字符串格式化的方法小结
Feb 20 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
Feb 07 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
Python中@property的理解和使用示例
Jun 11 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
python读取word 中指定位置的表格及表格数据
Oct 23 Python
基于python使用tibco ems代码实例
Dec 20 Python
Pycharm安装并配置jupyter notebook的实现
May 18 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
PyMongo 查询数据的实现
Jun 28 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下载生成的csv文件及问题总结
2015/08/06 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
微信小程序的线程架构【推荐】
2019/05/14 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
python中实现php的var_dump函数功能
2015/01/21 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
医药大学生求职简历的自我评价
2013/10/17 职场文书
经理秘书找工作求职信
2013/12/19 职场文书
甜点店创业计划书
2014/01/27 职场文书
医学类个人求职信范文
2014/02/05 职场文书
空乘英文求职信
2014/04/13 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
小马王观后感
2015/06/11 职场文书
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
你真的会用Mysql的explain吗
2022/03/31 MySQL
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server