详解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 相关文章推荐
tensorflow 打印内存中的变量方法
Jul 30 Python
Python选择网卡发包及接收数据包
Apr 04 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
Jun 28 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
使用selenium和pyquery爬取京东商品列表过程解析
Aug 15 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
Jan 20 Python
Python3 shelve对象持久存储原理详解
Mar 23 Python
如何理解Python中包的引入
May 29 Python
为什么python比较流行
Jun 19 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
Python中的程序流程控制语句
Feb 24 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
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
Python中datetime常用时间处理方法
2015/06/15 Python
开始着手第一个Django项目
2015/07/15 Python
python脚本替换指定行实现步骤
2017/07/11 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
python 重定向获取真实url的方法
2018/05/11 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
python制作微博图片爬取工具
2021/01/16 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
缓刑人员思想汇报500字
2014/09/12 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL