Python程式:壓縮列表元素(從左或右)使其成為單個元素


假設我們有一個名為nums的數字列表,我們需要從左右兩側壓縮它,直到只剩下一個元素。我們將返回每個步驟的狀態。

因此,如果輸入類似於nums = [10,20,30,40,50,60],則輸出將是

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

為了解決這個問題,我們將遵循以下步驟:

  • ret := 一個只包含一個元素nums的列表
  • 當nums的大小 > 1時,執行:
    • 如果nums的大小等於2,則:
      • nums := 建立一個包含元素(nums[0] + nums[1])的列表
    • 否則,如果nums的大小等於3,則:
      • nums := 建立一個包含元素(nums[0] + nums[1] + nums[2])的列表
    • 否則:
      • nums := 建立一個包含元素(nums[0] + nums[1])的列表,然後插入nums中從索引2到倒數第三個元素的另一個列表,最後新增一個包含元素(倒數第二個元素 + 最後一個元素)的列表
    • 將nums插入ret的末尾
  • 返回ret

讓我們看下面的實現來更好地理解:

示例

線上演示

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

輸入

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

輸出

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

更新於:2020年10月5日

140 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.