详解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 相关文章推荐
Python 元组(Tuple)操作详解
Mar 11 Python
python 排序算法总结及实例详解
Sep 28 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
使用Python防止SQL注入攻击的实现示例
May 21 Python
浅谈python量化 双均线策略(金叉死叉)
Jun 03 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 Python
python数字图像处理:图像的绘制
Jun 28 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的call_user_func传reference引发的思考
2010/07/23 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
Redis构建分布式锁
2017/03/28 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
python中元类用法实例
2014/10/10 Python
Python 从相对路径下import的方法
2018/12/04 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
python正则爬取某段子网站前20页段子(request库)过程解析
2019/08/10 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
Lime Crime官网:美国一家主打梦幻精灵系的彩妆品牌
2019/03/22 全球购物
实习生单位鉴定意见
2013/12/04 职场文书
计算机专业学生的自我评价
2013/12/15 职场文书
妇女工作先进事迹
2014/08/17 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
信访维稳工作汇报
2014/10/27 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
Nginx的基本概念和原理
2022/03/21 Servers