详解Python中打乱列表顺序random.shuffle()的使用方法

 更新时间:2019年11月11日 10:57:45   作者:chichu261  
这篇文章主要介绍了详解Python中打乱列表顺序random.shuffle()的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

之前自己一直使用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 实现多线程下载m3u8格式视频并使用fmmpeg合并

    python 实现多线程下载m3u8格式视频并使用fmmpeg合并

    这篇文章主要介绍了python 实现多线程下载m3u8格式视频,使用fmmpeg合并的实例代码,需要的朋友可以参考下
    2019-11-11
  • Python如何实现自动发送邮件

    Python如何实现自动发送邮件

    对于一些每天需要发的报表或者是需要一次发送多份的报表,我们可以考虑借助Python来自动发送邮件。本文主要介绍了如何利用Python实现自动发送邮件,感兴趣的小伙伴可以了解一下
    2021-11-11
  • pytorch中permute()函数用法补充说明(矩阵维度变化过程)

    pytorch中permute()函数用法补充说明(矩阵维度变化过程)

    这篇文章主要给大家介绍了关于pytorch中permute()函数用法补充说明的相关资料,本文详细说明了permute函数里维度变化的详细过程,需要的朋友可以参考下
    2022-04-04
  • Python爬虫练习汇总

    Python爬虫练习汇总

    这篇文章主要给大家分享的是Python爬虫练习题,文章以爬取南阳理工OJ为题目,根据页面数据显示可以查看到只有题号、难度、标题、通过率、存有数据,因此只需要对此四项数据进行爬取,下面一起静茹文章查看具体的操作过程吧</P><P>
    2021-12-12
  • Python 脚本实现淘宝准点秒杀功能

    Python 脚本实现淘宝准点秒杀功能

    这篇文章主要介绍了python实现淘宝准点秒杀脚本,本文图文实例相结合给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • python 字符串和整数的转换方法

    python 字符串和整数的转换方法

    今天小编就为大家分享一篇python 字符串和整数的转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python Pandas高级教程之时间处理

    Python Pandas高级教程之时间处理

    我们发现关于时间日期的简单计算很多功能都是datetime库提供的,那么pandas有没有提供跟日期时间有关的函数,通过下面文章来了解下,这篇文章主要给大家介绍了关于Python Pandas高级教程之时间处理的相关资料,需要的朋友可以参考下
    2021-10-10
  • 懒人必备Python代码之自动发送邮件

    懒人必备Python代码之自动发送邮件

    在传统的工作中,发送会议纪要是一个比较繁琐的任务,需要手动输入邮件内容、收件人、抄送人等信息,每次发送都需要重复操作,不仅费时费力,而且容易出现疏漏和错误。本文就来用Python代码实现这一功能吧
    2023-05-05
  • Django为窗体加上防机器人的验证码功能过程解析

    Django为窗体加上防机器人的验证码功能过程解析

    这篇文章主要介绍了Django为窗体加上防机器人的验证码功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python多行输入程序实例代码及扩展

    Python多行输入程序实例代码及扩展

    我们都知道Python内置方法input只能输入一行内容,我们今天来实现输入多行文本功能,这篇文章主要给大家介绍了关于Python多行输入程序的相关资料,需要的朋友可以参考下
    2022-04-04

最新评论