详解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 27 Python
python过滤字符串中不属于指定集合中字符的类实例
Jun 30 Python
python中子类调用父类函数的方法示例
Aug 18 Python
python实现雪花飘落效果实例讲解
Jun 18 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
python中下标和切片的使用方法解析
Aug 27 Python
Django实现基于类的分页功能
Oct 31 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
Python OpenCV 图像平移的实现示例
Jun 04 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通用防注入程序 推荐
2011/02/26 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
让FireFox支持innerText的实现代码
2009/12/01 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python实现自动上京东抢手机
2018/02/06 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
java判断三位数的实例讲解
2019/06/10 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
兴趣小组活动总结
2014/05/05 职场文书
大型活动组织方案
2014/05/10 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
社区护士演讲稿
2014/08/27 职场文书
医院护士党的群众路线教育实践活动对照检查材料思想汇报
2014/10/04 职场文书
水知道答案观后感
2015/06/08 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技