详解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 解析XML文件
Apr 15 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
Apr 18 Python
Python闭包函数定义与用法分析
Jul 20 Python
详解Python 装饰器执行顺序迷思
Aug 08 Python
python 去除二维数组/二维列表中的重复行方法
Jan 23 Python
Python根据成绩分析系统浅析
Feb 11 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 24 Python
Python matplotlib实时画图案例
Apr 23 Python
Python网络编程之ZeroMQ知识总结
Apr 25 Python
Python的property属性详细讲解
Apr 11 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写的求多项式导数的函数代码
2012/07/04 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
php Session存储到Redis的方法
2013/11/04 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
JavaScript 数组运用实现代码
2010/04/13 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
[53:38]OG vs LGD 2018国际邀请赛淘汰赛BO3 第三场 8.26
2018/08/30 DOTA
讲解python参数和作用域的使用
2013/11/01 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
成都思必达公司C#程序员招聘面试题
2013/06/26 面试题
校园十佳歌手策划书
2014/01/22 职场文书
会议邀请书范文
2014/02/02 职场文书
小学生作文评语大全
2014/04/21 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
销售助理岗位职责
2015/02/11 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
2015年中秋寄语
2015/07/31 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫