从列表中删除相邻的重复元素

发布于 2021-01-29 19:35:44

Google Python类| 清单练习-

给定一个数字列表,返回一个列表,其中所有相邻的==元素都已简化为单个元素,因此[1、2、2、3]返回[1、2、3]。您可以创建一个新列表或修改传入的列表。

我使用新列表的解决方案是-

def remove_adjacent(nums):
  a = []
  for item in nums:
    if len(a):
      if a[-1] != item:
        a.append(item)
    else: a.append(item)        
  return a

问题甚至暗示可以通过修改传入列表来完成。但是,python文档警告不要在使用for循环迭代列表时修改元素。

我想知道除了遍历列表之外还能做些什么呢?我不是在寻找解决方案,而是一个可以将我带向正确方向的提示。

更新

-更新了上面的代码并提出了改进建议。

-使用建议的提示在while循环中尝试以下内容-

def remove_adjacent(nums):
  i = 1
  while i < len(nums):    
    if nums[i] == nums[i-1]:
      nums.pop(i)
      i -= 1  
    i += 1
  return nums
关注者
0
被浏览
128
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用生成器遍历列表的元素,yield仅在更改后才使用新的生成器。

    itertools.groupby
    确实做到这一点。

    如果遍历副本,则可以修改传入列表:

    for elt in theList[ : ]:
        ...
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看