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 03 Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
LRUCache的实现原理及利用python实现的方法
Nov 21 Python
Python使用gRPC传输协议教程
Oct 16 Python
Python设计模式之装饰模式实例详解
Jan 21 Python
Python3几个常见问题的处理方法
Feb 26 Python
Python3.5实现的三级菜单功能示例
Mar 25 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
python英语单词测试小程序代码实例
Sep 09 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
浅谈python的elementtree模块处理中文注意事项
Mar 06 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 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的mssql数据库连接类实例
2014/11/28 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
解决Mac下使用python的坑
2019/08/13 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
python 线程的五个状态
2020/09/22 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
介绍一下write命令
2012/09/24 面试题
总经理办公室主任岗位职责
2013/11/12 职场文书
大堂副理的岗位职责范文
2014/02/17 职场文书
物理力学求职信
2014/02/18 职场文书
初一学生期末评语
2014/04/24 职场文书
保证书格式范文
2014/04/28 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang
浅谈Python numpy创建空数组的问题
2021/05/25 Python
JavaScript异步操作中串行和并行
2021/11/20 Javascript