一尘不染

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

python

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

阅读 220

收藏
2020-12-20

共1个答案

一尘不染

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

itertools.groupby
确实做到这一点。

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

for elt in theList[ : ]:
    ...
2020-12-20