Computer >> Máy Tính >  >> Lập trình >> Python

Trộn một mảng trong Python

Giả sử chúng ta có một mảng A, chúng ta phải xáo trộn một tập hợp các số không có bản sao. Vì vậy, nếu đầu vào là [1,2,3], thì đối với xáo trộn, nó sẽ là [1,3,2], sau khi đặt lại, nếu chúng tôi xáo trộn lại, nó sẽ là [2,3,1]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Sẽ có những phương pháp khác nhau. đây là init (), reset (), shuffle (). Những điều này sẽ hoạt động như bên dưới -

  • init sẽ như thế nào -

  • original:=bản sao của mảng đã cho

  • temp:=nums

  • chỉ số:=danh sách các số từ 0 đến độ dài là num - 1

  • reset () sẽ trả về mảng ban đầu

  • shuffle () sẽ giống như -

  • nếu độ dài tạm thời là 0, thì trả về mảng trống

  • i:=lựa chọn ngẫu nhiên một chỉ mục từ mảng chỉ số, j:=chọn một chỉ mục khác từ mảng chỉ số một cách ngẫu nhiên

  • hoán đổi các phần tử có ở chỉ mục i và j

  • trở lại nhiệt độ

  • một phương thức khác được gọi là getAllPermutation () sẽ nhận nums, i, ban đầu là i =0, sẽ giống như -

  • curr:=i

  • nếu i =độ dài của nums, thì

    • chèn một bản sao của mảng nums vào một mảng khác được gọi là tất cả

    • trở lại

  • for j:=curr to length of nums

    • hoán đổi các phần tử ở chỉ mục j và curr từ nums

    • gọi getAllPermutation (nums, curr + 1)

    • hoán đổi các phần tử ở chỉ mục j và curr từ nums

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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

Đầu vào

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

Đầu ra

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