详解Python中打乱列表顺序random.shuffle()的使用方法


Posted in Python onNovember 11, 2019

之前自己一直使用random中 randint生成随机数以及使用for将列表中的数据遍历一次。

现在有个需求需要将列表的次序打乱,或者也可以这样理解:

【需求】将一个容器中的数据每次随机逐个遍历一遍。

random.shuffle()方法提供了完美的解决方案。

不会生成新的列表,只是将原列表的次序打乱

# shuffle()使用样例
import random

x = [i for i in range(10)]
print(x)
random.shuffle(x)
print(x)

源码及注释(个人翻译注释)

def shuffle(self, x, random=None):
  """Shuffle list x in place, and return None.
  原位打乱列表,不生成新的列表。

  Optional argument random is a 0-argument
  function returning a random float in [0.0, 1.0); 
  if it is the default None, 
  the standard random.random will be used.
 可选参数random是一个从0到参数的函数,返回[0.0,1.0)中的随机浮点;
 如果random是缺省值None,则将使用标准的random.random()。
  """

  if random is None:
    randbelow = self._randbelow
    for i in reversed(range(1, len(x))):
      # pick an element in x[:i+1] with which to exchange x[i]
      j = randbelow(i + 1)
      x[i], x[j] = x[j], x[i]
  else:
    _int = int
    for i in reversed(range(1, len(x))):
      # pick an element in x[:i+1] with which to exchange x[i]
      j = _int(random() * (i + 1))
      x[i], x[j] = x[j], x[i]

random 中其他的方法

class Random(_random.Random):

  ## -------------------- integer methods -------------------
  def randrange(self, start, stop=None, step=1, _int=int):

  def randint(self, a, b):

  def _randbelow(self, n, int=int, maxsize=1 << BPF, type=type,
          Method=_MethodType, BuiltinMethod=_BuiltinMethodType):

  ## -------------------- sequence methods -------------------
  def choice(self, seq):

  def shuffle(self, x, random=None):

  def sample(self, population, k):

  def choices(self, population, weights=None, *, cum_weights=None, k=1):

  ## -------------------- uniform distribution -------------------
  def uniform(self, a, b):

  ## -------------------- triangular --------------------
  def triangular(self, low=0.0, high=1.0, mode=None):

  ## -------------------- normal distribution --------------------
  def normalvariate(self, mu, sigma):

  ## -------------------- lognormal distribution --------------------
  def lognormvariate(self, mu, sigma):

  ## -------------------- exponential distribution --------------------
  def expovariate(self, lambd):

  ## -------------------- von Mises distribution --------------------
  def vonmisesvariate(self, mu, kappa):

  ## -------------------- gamma distribution --------------------
  def gammavariate(self, alpha, beta):

  ## -------------------- Gauss (faster alternative) --------------------
  def gauss(self, mu, sigma):

  def betavariate(self, alpha, beta):

  ## -------------------- Pareto --------------------
  def paretovariate(self, alpha):

  ## -------------------- Weibull --------------------
  def weibullvariate(self, alpha, beta):

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
wxPython 入门教程
Oct 07 Python
Python学习笔记之os模块使用总结
Nov 03 Python
用python 制作图片转pdf工具
Jan 30 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
Python实现对文件进行单词划分并去重排序操作示例
Jul 10 Python
python游戏地图最短路径求解
Jan 16 Python
Python代码太长换行的实现
Jul 05 Python
Python 进程之间共享数据(全局变量)的方法
Jul 16 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
python实现飞机大战项目
Mar 11 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
Nov 11 #Python
Python多继承以及MRO顺序的使用
Nov 11 #Python
python 有效的括号的实现代码示例
Nov 11 #Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 #Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 #Python
python OpenCV GrabCut使用实例解析
Nov 11 #Python
Python上下文管理器用法及实例解析
Nov 11 #Python
You might like
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
字段太多jquey快速清空表单内容方法
2014/08/21 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
2019/04/22 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
简单的通用表达式求10乘阶示例
2014/03/03 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
pygame加载中文名mp3文件出现error
2017/03/31 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
PyTorch上实现卷积神经网络CNN的方法
2018/04/28 Python
Django 解决由save方法引发的错误
2020/05/21 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
《音乐之都维也纳》教学反思
2014/04/16 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书