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 splitlines使用技巧
Sep 06 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
Django框架中间件(Middleware)用法实例分析
May 24 Python
浅谈Python小波分析库Pywavelets的一点使用心得
Jul 09 Python
Python Django框架模板渲染功能示例
Nov 08 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
python实现简易名片管理系统
Apr 11 Python
python通过函数名调用函数的几种方法总结
Jun 07 Python
python基础之//、/与%的区别详解
Jun 10 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
第十三节 对象串行化 [13]
2006/10/09 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
jquery 按键盘上的enter事件
2014/05/11 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
nodejs基础应用
2017/02/03 NodeJs
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
angularJS开发注意事项
2018/05/26 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
将Python代码打包为jar软件的简单方法
2015/08/04 Python
浅谈Python中的私有变量
2018/02/28 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
Python递归函数实例讲解
2019/02/27 Python
浅析Python3 pip换源问题
2020/01/06 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
初二生物教学反思
2014/02/03 职场文书
中班上学期个人总结
2015/02/12 职场文书
公司欠款证明
2015/06/24 职场文书
2016年“世界气象日”广播稿
2015/12/17 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
浅析JavaScript中的变量提升
2022/06/01 Javascript