1

我正在编写一个将创建一个新的随机列表的函数(我不能使用内置的随机函数)

def Shuf(aList):

  import random
  newList=[]
  for i in range(len(aList)):
      element=random.sample(aList,1)
      newList+=element
  return newList

这就是我现在拥有的,它正在工作,但是当我返回洗牌列表时,我的列表中有重复的元素。如何让我的函数只返回一次列表中的元素?

4

2 回答 2

0

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

>>> 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]
>>> 
于 2013-07-05T18:00:35.103 回答
0

类似下一个(未测试)。

from random import choice

def get_list( l ):
    len_ = len( l )
    output = []

    for i in range( len_ ):
        index = choice( len( l ) )
        output.append( l[ index ] )
        del l[ index ]

    return output
于 2013-07-05T16:19:42.757 回答