详解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程序中进行文件读取和写入操作的教程
Apr 28 Python
详解Python装饰器由浅入深
Dec 09 Python
使用Python写一个贪吃蛇游戏实例代码
Aug 21 Python
详解python中@的用法
Mar 27 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
Python使用os.listdir和os.walk获取文件路径
May 21 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
Python脚本实现Zabbix多行日志监控过程解析
Aug 26 Python
Python环境搭建过程从安装到Hello World
Feb 05 Python
Python中seaborn库之countplot的数据可视化使用
Jun 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
长波知识介绍
2021/03/01 无线电
PHP多线程抓取网页实现代码
2010/07/22 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
Opcache导致php-fpm崩溃nginx返回502
2015/03/02 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
Python中实现结构相似的函数调用方法
2015/03/10 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
Django 自动生成api接口文档教程
2019/11/19 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
巧用HTML5给按钮背景设计不同的动画简单实例
2016/08/09 HTML / CSS
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
采购意向书范本
2014/03/31 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
领导离职感言
2015/08/03 职场文书
市场营销计划书
2019/04/24 职场文书