1

我正在编写两个不同的随机播放函数。

第一个 shuffle 函数必须获取一个列表并返回一个新列表,其中的元素随机排列。

这就是我到目前为止的第一个随机播放功能-

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

第二个 shuffle 函数将一个列表作为参数,并在适当的位置对列表进行混洗。

我知道如何使用内置函数来做到这一点,但我不允许使用它。

4

3 回答 3

1

您可能会发现这种改组的实现适合您的需要。在使用它们之前,请确保注意这两个功能之间的区别。

import copy
import random


def main():
    my_list = list(range(10))
    print(my_list)
    print(shuffle(my_list))
    print(my_list)
    shuffle_in_place(my_list)
    print(my_list)


def shuffle(container):
    new_container = copy.copy(container)
    shuffle_in_place(new_container)
    return new_container


def shuffle_in_place(container):
    for index in range(len(container) - 1, 0, -1):
        other = random.randint(0, index)
        if other == index:
            continue
        container[index], container[other] = container[other], container[index]


if __name__ == '__main__':
    main()
于 2013-07-05T18:49:19.510 回答
0

灵感来自随机模块中随机播放的python源代码实现

  import random

  def shuffle(A):
      last_index = len(A) - 1

      while last_index > 0:
          rand_index = random.randint(0, last_index)
          A[last_index], A[rand_index] = A[rand_index], A[last_index]
          last_index -= 1

      return A
于 2021-12-08T08:25:23.390 回答
-2

计划:从元素 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
于 2016-11-12T20:25:07.250 回答