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中的XML库4Suite Server的介绍
Apr 14 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
python实现俄罗斯方块
Jun 26 Python
利用Python如何批量更新服务器文件
Jul 29 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
python画图--输出指定像素点的颜色值方法
Jul 03 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
python 爬取古诗文存入mysql数据库的方法
Jan 08 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
Python OpenCV实现图形检测示例详解
Apr 08 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页面中文乱码分析
2013/10/29 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
PHP实现倒计时功能
2020/11/16 PHP
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
switchery按钮的使用方法
2017/12/18 Javascript
Vue封装Swiper实现图片轮播效果
2018/02/06 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
Python OS模块实例详解
2019/04/15 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
文秘人员工作职责
2014/01/31 职场文书
临床医师个人自我评价
2014/04/06 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
清洁员岗位职责
2015/02/15 职场文书
上学路上观后感
2015/06/16 职场文书
运动会主持人开幕词
2016/03/04 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android