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

Chương trình sqeeze danh sách các phần tử từ trái hoặc phải để biến nó thành một phần tử duy nhất trong Python

Giả sử chúng ta có một danh sách các số được gọi là num, chúng ta phải bóp nó từ cả bên trái và bên phải cho đến khi còn lại một phần tử. Chúng tôi sẽ trả lại các trạng thái ở mỗi bước.

Vì vậy, nếu đầu vào giống như nums =[10,20,30,40,50,60], thì đầu ra sẽ là

[ [10, 20, 30, 40, 50, 60],
   [30, 30, 40, 110],
   [60, 150],
   [210]
]

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

  • ret:=danh sách chỉ có một nums phần tử
  • trong khi kích thước của nums> 1, thực hiện
    • nếu kích thước của nums bằng 2, thì
      • nums:=tạo danh sách có phần tử (nums [0] + nums [1])
    • ngược lại khi kích thước của num bằng 3, thì
      • nums:=tạo danh sách có phần tử (nums [0] + nums [1] + nums [2])
    • nếu không,
      • nums:=tạo một danh sách với các phần tử (nums [0] + nums [1]) sau đó chèn một danh sách khác từ nums từ chỉ mục 2 đến phần tử cuối cùng thứ ba của nums rồi thêm một danh sách khác có phần tử (phần tử cuối cùng thứ hai của nums + phần tử cuối cùng của nums)
    • chèn nums vào cuối ret
  • trả lời lại

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

Ví dụ

class Solution:
   def solve(self, nums):
      ret = [nums]
      while len(nums) > 1:
         if len(nums) == 2:
            nums = [nums[0] + nums[1]]
         elif len(nums) == 3:
            nums = [nums[0] + nums[1] + nums[2]]
         else:
            nums = [nums[0] + nums[1]] + nums[2:-2] + [nums[-2] + nums[-1]]
            ret.append(nums)
      return ret
ob = Solution() print(ob.solve([10,20,30,40,50,60]))

Đầu vào

[10,20,30,40,50,60]

Đầu ra

[ [10, 20, 30, 40, 50, 60],
   [30, 30, 40, 110],
   [60, 150],
   [210]
]