详解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简单日志处理类分享
Feb 14 Python
Python中的自省(反射)详解
Jun 02 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
Python实现简单的获取图片爬虫功能示例
Jul 12 Python
python利用urllib和urllib2访问http的GET/POST详解
Sep 27 Python
python实现用户答题功能
Jan 17 Python
python实现mysql的读写分离及负载均衡
Feb 04 Python
Python多进程写入同一文件的方法
Jan 14 Python
Python函数装饰器常见使用方法实例详解
Mar 30 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
Python使用pycharm导入pymysql教程
Sep 16 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 session 错误
2009/05/21 PHP
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
2013/04/13 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
js初始化验证实例详解
2016/11/26 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
DNA测试:Orig3n
2019/03/01 全球购物
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
设置器与访问器的定义以及各自特点
2016/01/08 面试题
小学生红领巾广播稿
2014/01/21 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
信息工作经验交流材料
2014/05/28 职场文书
厕所文明标语
2014/06/11 职场文书
校庆团日活动总结
2014/08/28 职场文书