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判断端口是否打开的实现代码
Feb 10 Python
python排序方法实例分析
Apr 30 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
Python遍历numpy数组的实例
Apr 04 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
python实现淘宝秒杀脚本
Jun 23 Python
python批量修改ssh密码的实现
Aug 08 Python
python生成特定分布数的实例
Dec 05 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
Django数据统计功能count()的使用
Nov 30 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
python3 字符串str和bytes相互转换
Mar 23 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
VUE搭建手机商城心得和遇到的坑
2019/02/21 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
Python实现控制台输入密码的方法
2015/05/29 Python
python3.x上post发送json数据
2018/03/04 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
python自动点赞功能的实现思路
2020/02/26 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
2014个人年度工作总结
2014/12/15 职场文书
2015年个人实习工作总结
2015/05/28 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript