专栏首页BigYoung小站Python 如何随机打乱列表(List)排序

Python 如何随机打乱列表(List)排序

场景:

现在有一个list:[1,2,3,4,5,6],我需要把这个list在输出的时候,是以一种随机打乱的形式输出。

专业点的术语:将一个容器中的数据每次随机逐个遍历一遍。

注意:不是生成一个随机的list集。

环境:

Python 3.6

解决方案:

方案一:

有人可能会通过Random内置函数,来间接实现想要的结果。但是这种方式,太原始,也不够优雅,而且有种重复造轮子的嫌疑。这里我就不贴我自己通过random实现的效果了。

方案二:

Random中有一个random.shuffle()方法提供了完美的解决方案。代码如下:

x = [1,2,3,4,5,6]
random.shuffle(x)
print(x)

输出结果:

第一次输出内容:[6, 5, 1, 3, 2, 4]
第二次输出内容:[6, 1, 3, 5, 2, 4]
第三次输出内容:[5, 3, 1, 2, 4, 6]

从结果我们可以看出,输出是完全随机的,代码量就两行,不需要random,不需要for循环。

源码解读:

此部分原文链接:Python中打乱列表顺序 random.shuffle()的使用方法[1]

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.shuffle()是对原list做修改,如果需要保留原list,请注意这个细节。 ”

参考资料

[1]

Python中打乱列表顺序 random.shuffle()的使用方法: https://blog.csdn.net/chichu261/article/details/83302736?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

本文分享自微信公众号 - BigYoung小站(bigyoungs),作者:Young文人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 如何随机打乱列表(List)排序

    现在有一个list:[1,2,3,4,5,6],我需要把这个list在输出的时候,是以一种随机打乱的形式输出。

    BigYoung小站
  • python “目录服务不能在一个对象的RDN 属性上执行该请求的操作”

    今天使用Python的第三方库pyad在AD中修改部门(OU)的信息,通过ou.update更新部门属性,想要改部门的名字(Name),这是报错:“目录服务不能...

    BigYoung小站
  • 【CentOS】配置网络yum源遇到的问题之解决办法

    我配置的是yum源是:wget http://mirrors.sohu.com/help/CentOS-Base-sohu.repo

    BigYoung小站
  • Python 如何随机打乱列表(List)排序

    现在有一个list:[1,2,3,4,5,6],我需要把这个list在输出的时候,是以一种随机打乱的形式输出。

    BigYoung小站
  • python随机数产生

    random.random()用于生成一个0到1的随机浮点数: 0 <= n < 1.0

    py3study
  • Python标准库random用法精要

    random标准库主要提供了伪随机数生成函数和相关的类,同时也提供了SystemRandom类(也可以直接使用os.urandom()函数)来支持生成加密级别要...

    Python小屋屋主
  • python的random模块

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    于小勇
  • python生成随机数方法小结

    random.randrange(a, b, step):在指定的集合[a,b)中,以step为基数随机取一个数.如random.randrange(0, 20...

    用户5745385
  • python模块之random

    random.random() 产生0-1的随机浮点数 random.uniform(a, b) 产生指定范围内的随机浮点数 ran...

    菲宇
  • Python之random(随机数必知)

    咻一咻

扫码关注云+社区

领取腾讯云代金券