在没有内置函数的情况下洗牌阵列?

时间:2016-11-17 00:24:59

标签: python python-3.x shuffle

尝试在不使用内置函数的情况下对数组进行混洗。

def shuffle2():
    lis = [5,6,7,10,11,12]
    print (lis)
    x = random.randint (0,len (lis)-1)
    y = random.randint (0,len (lis)-1)
    z = lis[x], lis[y] = lis[y], lis[x]#flips the elements around

 shuffle2()

到目前为止,它只围绕一次切换两个元素,但我需要它来整理整个阵列,而不仅仅是两个位置。

输出:       [5,6,7,10,11,12]       [11,6,7,10,5,12]

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这是一种方式:

import bisect
import random

def shuffle(lis):
    newlis = []
    temp = []
    for i in lis:
        x = random.random()
        #put x into temp and put i into the same place in newlis
        n = bisect.bisect(temp,x)
        temp.insert(n,x)
        newlis.insert(n,i)
    return newlis

lis=[5,6,7,10,11,12]
>>> shuffle(lis)
[6, 12, 10, 11, 7, 5]

该方法基本上生成随机数并将它们放入排序列表(temp)中。项目是以相同的方式放入newlis中,具有对其进行排序的效果。

当然,您可以编写自己的二等分,或者使用更简单的搜索功能...

答案 1 :(得分:0)

import random
def shuffle2():
    i = 1
    lis = [5,6,7,10,11,12]
    print (lis)
    while i < len(lis):
        x = random.randint (0,len (lis)-1)
        y = random.randint (0,len (lis)-1)
        z = lis[x], lis[y] = lis[y], lis[x]
        i = i + 1
        #flips the elements around

    print (lis)