我正在写两个不同的shuffle函数。
第一个shuffle函数必须采用一个列表并返回一个新的列表,其中的元素随机排列为随机顺序。
这是我到目前为止第一次洗牌功能 -
def shuf(List):
import random
newList=[]
for i in List:
i=random.randrange(len(List))
newList+=i
return newList
第二个shuffle函数将列表作为参数并将列表随机混洗。
我知道如何使用内置函数执行此操作,但我不允许使用它。
答案 0 :(得分:1)
您可能会发现这种改组实施适合您的需求。在使用之前,请确保注意两个功能之间的区别。
>>> import random
>>> def shuffle(array):
copy = list(array)
shuffle_in_place(copy)
return copy
>>> def shuffle_in_place(array):
array_len = len(array)
assert array_len > 2, 'Array is too short to shuffle!'
for index in range(array_len):
swap = random.randrange(array_len - 1)
swap += swap >= index
array[index], array[swap] = array[swap], array[index]
>>> array = list(range(10))
>>> array
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> shuffle(array)
[7, 2, 3, 5, 8, 6, 0, 1, 9, 4]
>>> array
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> shuffle_in_place(array)
>>> array
[8, 3, 1, 6, 9, 7, 0, 4, 2, 5]
>>>
答案 1 :(得分:0)
计划:从元素0开始,从头开始查看列表;为它找到一个新的随机位置,比如6,将0的值放在6中,将6的值放在0中。移到元素1并重复此过程,依此类推,直到列表的其余部分
import random
iteration = random.randint(2, 100)
temp_var = 0
while iteration > 0:
# We will be swapping the value of i for j.
# And then setting j to what i was using the temp_var place holder.
for i in range(1, len(my_list)): # have to use range with len()
for j in range(1, len(my_list) - i):
# Using temp_var as my place holder so I don't lose values
temp_var = my_list[i]
my_list[i] = my_list[j]
my_list[j] = temp_var
iteration -= 1
答案 2 :(得分:0)
您可以使用此:
import random
def shuffle(lst):
return sorted(lst ,key = lambda i,random.ramdom())