当前位置:  开发笔记 > 编程语言 > 正文

使用python随机播放数组,使用python随机化数组项顺序

如何解决《使用python随机播放数组,使用python随机化数组项顺序》经验,为你挑选了6个好方法。

使用python对数组进行洗牌的最简单方法是什么?



1> David Z..:
import random
random.shuffle(array)


具有讽刺意味的是,当我刚刚搜索"python shuffle array"时,这个页面在Google中名列前茅
是否有一个选项不会改变原始数组但返回一个新的混洗数组?
@Charlie人谷歌这些问题,以便他们可以在堆栈溢出等地方找到答案.只要不是重复,将堆栈溢出作为资源选项就没有错

2> Douglas Leed..:
import random
random.shuffle(array)



3> Qy Zuo..:

使用sklearn执行此操作的替代方法

from sklearn.utils import shuffle
X=[1,2,3]
y = ['one', 'two', 'three']
X, y = shuffle(X, y, random_state=0)
print(X)
print(y)

输出:

[2, 1, 3]
['two', 'one', 'three']

优点:您可以在不中断映射的情况下同时随机连接多个阵列.并且'random_state'可以控制混洗以获得可重现的行为.


比接受的答案更完整(并且通常更有用)

4> Mark Rhodes..:

其他答案是最简单的,但是这个random.shuffle方法实际上没有返回任何内容有点烦人- 它只是对给定的列表进行排序.如果你想链接调用或只是能够在一行中声明一个混洗数组,你可以这样做:

    import random
    def my_shuffle(array):
        random.shuffle(array)
        return array

然后你可以做如下行:

    for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):


Python实际上并不旨在尽可能简短.Python旨在平衡可读性和表达性.它恰好相当简短,主要是因为它是一种非常高级的语言.Python自己的内置函数*通常*(并非总是)努力*要么*是"函数式"(返回一个值,但没有副作用)*或*是"过程式"(通过副作用操作,并且不要什么都没有).这与Python在语句和表达式之间非常严格的区分密切相关.
它没有返回*具体*,因为它试图通过改变输入来提醒你它的工作原理.(这可以节省内存.)您的功能也可以改变其输入.
我想这是一种风格的东西.就个人而言,我更喜欢这样一个事实,即我可以写一行来实现其他方式.对我来说似乎很奇怪,一种旨在让程序尽可能短的语言在这些情况下不会返回传递的对象.由于它改变了输入,你可以替换对random.shuffle的调用来调用这个版本而不会出现问题.

5> Shuai Zhang..:

在处理常规Python列表时,random.shuffle()将像前面的答案一样完成工作.

但是当它来到ndarray(numpy.array)时,random.shuffle似乎打破了原来ndarray.这是一个例子:

import random
import numpy as np
import numpy.random

a = np.array([1,2,3,4,5,6])
a.shape = (3,2)
print a
random.shuffle(a) # a will definitely be destroyed
print a

只需使用: np.random.shuffle(a)

就像random.shuffle,np.random.shuffle就地将阵列洗牌一样.


毁灭的意思究竟是什么意思?(我的意思是,在这种情况下 - 我不是ELL.)

6> Charlie Park..:

如果你想要一个新阵列,你可以使用sample:

import random
new_array = random.sample( array, len(array) )

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有