Python程序:将连续相同的元素打包到子列表中


假设我们有一个数字列表nums,我们将把相同值的连续元素打包到子列表中。请记住,如果列表中只有一个元素出现一次,它仍然应该在它自己的子列表中。

因此,如果输入类似于nums = [5, 5, 2, 7, 7, 7, 2, 2, 2, 2],则输出将为[[5, 5], [2], [7, 7, 7], [2, 2, 2, 2]]

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

  • 如果nums为空,则
    • 返回一个新列表
  • result := 一个包含另一个列表的列表,该列表包含nums[0]
  • j := 0
  • 对于范围从1到nums大小的i,执行:
    • 如果nums[i]与nums[i - 1]不同,则
      • 在result的末尾插入一个新列表
      • j := j + 1
    • 在result[j]的末尾插入nums[i]
  • 返回result

让我们来看下面的实现,以便更好地理解:

示例

 在线演示

class Solution:
   def solve(self, nums):
      if not nums:
         return []
      result = [[nums[0]]]
      j = 0
      for i in range(1, len(nums)):
         if nums[i] != nums[i - 1]:
            result.append([])
            j += 1
            result[j].append(nums[i])
      return result
ob = Solution()
nums = [5, 5, 2, 7, 7, 7, 2, 2, 2, 2]
print(ob.solve(nums))

输入

[5, 5, 2, 7, 7, 7, 2, 2, 2, 2]

输出

[[5, 5], [2], [7, 7, 7], [2, 2, 2, 2]]

更新于:2020年10月20日

450 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告