在不使用内置函数的情况下随机播放python列表

时间:2013-07-05 12:56:49

标签: python python-3.3

我正在写两个不同的shuffle函数。

第一个shuffle函数必须采用一个列表并返回一个新的列表,其中的元素随机排列为随机顺序。

这是我到目前为止第一次洗牌功能 -

def shuf(List):
    import random
    newList=[]
    for i in List:
        i=random.randrange(len(List))
        newList+=i
    return newList

第二个shuffle函数将列表作为参数并将列表随机混洗。

我知道如何使用内置函数执行此操作,但我不允许使用它。

3 个答案:

答案 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())