详解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进程管理工具supervisor使用实例
Sep 17 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
对pandas中apply函数的用法详解
Apr 10 Python
python执行系统命令后获取返回值的几种方式集合
May 12 Python
python 对dataframe下面的值进行大规模赋值方法
Jun 09 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
Python 迭代,for...in遍历,迭代原理与应用示例
Oct 12 Python
基于Python获取城市近7天天气预报
Nov 26 Python
pytorch自定义二值化网络层方式
Jan 07 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
python爬虫调度器用法及实例代码
Nov 30 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
模仿OSO的论坛(四)
2006/10/09 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
Use Word to Search for Files
2007/06/15 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
js调用iframe实现打印页面内容的方法
2014/03/04 Javascript
特殊日期提示功能的实现方法
2016/06/16 Javascript
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
python字符串替换示例
2014/04/24 Python
基于python实现高速视频传输程序
2019/05/05 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
Python 如何创建一个线程池
2020/07/28 Python
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
培训主管的职业生涯规划
2014/03/06 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
离婚协议书格式
2014/11/21 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB