相关疑难解决方法(0)

删除在Python中具有连续重复项的元素

我对这个问题很好奇:消除列表元素的连续重复,以及如何在Python中实现它.

我想出的是:

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
    else:
        i = i+1
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3, 4, 5, 1, 2]
Run Code Online (Sandbox Code Playgroud)

我觉得还可以.

所以我很好奇,想看看我是否可以删除连续重复的元素并获得此输出:

[2, 3, 5, 1, 2]
Run Code Online (Sandbox Code Playgroud)

为此我做了这个:

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0
dupe = False

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
        dupe = True
    elif dupe:
        del list[i]
        dupe = False
    else:
        i += 1
Run Code Online (Sandbox Code Playgroud)

但它似乎有点笨拙而不是pythonic,你有更智能/更优雅/更有效的方式来实现它吗?

python list duplicates

37
推荐指数
3
解决办法
2万
查看次数

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

谷歌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
Run Code Online (Sandbox Code Playgroud)

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

我想知道除了迭代列表之外我还能尝试什么,以完成这项工作.我不是在寻找解决方案,但也许是一个可以带我走向正确方向的提示.

UPDATE

使用建议的改进更新了上述代码.

使用建议的提示使用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
Run Code Online (Sandbox Code Playgroud)

python

15
推荐指数
4
解决办法
2万
查看次数

标签 统计

python ×2

duplicates ×1

list ×1