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 相关文章推荐
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
Windows平台Python连接sqlite3数据库的方法分析
Jul 12 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
浅谈Python实现Apriori算法介绍
Dec 20 Python
python调用自定义函数的实例操作
Jun 26 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
基于python实现微信好友数据分析(简单)
Feb 16 Python
python生成任意频率正弦波方式
Feb 25 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
基于python SMTP实现自动发送邮件教程解析
Jun 02 Python
python 实现简单的计算器(gui界面)
Nov 11 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转成EXE文件
2006/10/09 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
详细介绍8款超实用JavaScript框架
2013/10/25 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
2015/05/07 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
python的三目运算符和not in运算符使用示例
2014/03/03 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
Python2手动安装更新pip过程实例解析
2020/07/16 Python
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
文秘自荐信
2013/10/20 职场文书
一名老师的自我评价
2014/02/07 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
考试作弊检讨书
2014/10/21 职场文书
风之谷观后感
2015/06/11 职场文书
Java如何实现树的同构?
2021/06/22 Java/Android