用Python随机排列数组

假设我们有一个数组A,我们必须洗净一组没有重复的数字。因此,如果输入类似于[1,2,3],则对于改组,它将为[1,3,2],在重置后,如果再次进行改组,则为[2,3,1]

为了解决这个问题,我们将遵循以下步骤-

  • 会有不同的方法。这些都是init()reset()shuffle()。这些将如下所示-

  • 初始化将像-

  • 原始:=给定数组的副本

  • temp:= nums

  • index:=从0到nums – 1的数字列表

  • reset()将返回原始数组

  • shuffle()会像-

  • 如果temp的长度为0,则返回空数组

  • i:=从索引数组中随机选择一个索引,j:=从索引数组中随机选择另一个索引

  • 交换索引i和j中存在的元素

  • 返回温度

  • 另一个被称为getAllPermutation()num的方法,i,最初i = 0,就像-

  • curr:=我

  • 如果i = nums的长度,则

    • 将nums数组的副本插入另一个称为all的数组中

    • 返回

  • 对于j:= curr到nums的长度

    • 在索引j处交换元素并从num产生

    • 调用getAllPermutation(nums,curr + 1)

    • 在索引j处交换元素并从num产生

让我们看下面的实现以更好地理解-

示例

import random
class Solution(object):
   def __init__(self, nums):
      self.original = [x for x in nums]
      self.temp = nums
      self.indices = [x for x in range(len(nums))]
   def reset(self):
      return self.original
   def shuffle(self):
      if not len(self.temp):
         return []
      i = random.choice(self.indices)
      j = random.choice(self.indices)
      self.temp[i], self.temp[j] = self.temp[j], self.temp[i]
      return self.temp
ob = Solution([1,2,3])
print(ob.shuffle())
print(ob.reset())
print(ob.shuffle())

输入值

Initialize with [1,2,3] , then call shuffle(), reset() and shuffle()

输出结果

[2, 1, 3]
[1, 2, 3]
[2, 3, 1]