详解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实现竖排打印传单手机号码易撕条
Mar 16 Python
Python中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
使用Python脚本来获取Cisco设备信息的示例
May 04 Python
Python实现控制台输入密码的方法
May 29 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
Jul 15 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
Feb 29 Python
tensorflow模型转ncnn的操作方式
May 25 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
python中使用 unittest.TestCase单元测试的用例详解
Aug 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP设计模式之代理模式的深入解析
2013/06/13 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
jquery中动态效果小结
2010/12/16 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
使用JS获取当前地理位置方法汇总
2014/12/18 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
python批量下载图片的三种方法
2013/04/22 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
用Eclipse写python程序
2018/02/10 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
Python3实现转换Image图片格式
2018/06/21 Python
python设置值及NaN值处理方法
2018/07/03 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Python 如何批量更新已安装的库
2020/05/26 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
介绍一下Python下range()函数的用法
2013/11/07 面试题
电视节目策划方案
2014/05/16 职场文书
中文专业自荐书
2014/06/29 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
签证工作证明模板
2015/06/15 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python