尝试在不使用内置函数的情况下对数组进行混洗。
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]
有什么想法吗?
答案 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)