详解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的ORM框架中的SQLAlchemy库的映射关系
Apr 25 Python
基于Python实现文件大小输出
Jan 11 Python
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
Mar 30 Python
pow在python中的含义及用法
Jul 11 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
python获取栅格点和面值的实现
Mar 10 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 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数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
Cookie 小记
2010/04/01 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
简单实现jquery隔行变色
2017/11/09 jQuery
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
Python的Flask框架的简介和安装方法
2015/11/13 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
python实现飞船大战
2020/04/24 Python
Python reduce函数作用及实例解析
2020/05/08 Python
高中校园广播稿
2014/01/11 职场文书
狼和鹿教学反思
2014/02/05 职场文书
小学生家长评语大全
2014/02/10 职场文书
2014元旦晚会策划方案
2014/02/19 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
擅自离岗检讨书
2014/09/12 职场文书
门店店长岗位职责
2015/04/14 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
JavaScript实例 ODO List分析
2022/01/22 Javascript