Python 删除列表中的特定连续副本

Python 删除列表中的特定连续副本,python,duplicates,itertools,Python,Duplicates,Itertools,这篇文章类似于,但我想要的是删除列表中特定的连续重复项。 假设我们有一个列表: [1,1,1,2,2,3,2,4,4,4,1] 我想要: [1,2,2,3,2,4,4,4,1] 我只想删除“一个”。我正在尝试itertools.groupby,但我还没有找到一种方法。您可以使用分组键来保留键或保留返回的组: l = [1,1,1,2,2,3,2,4,4,4,1] from itertools import chain, groupby list(chain.from_iterable([

这篇文章类似于,但我想要的是删除列表中特定的连续重复项。 假设我们有一个列表:

[1,1,1,2,2,3,2,4,4,4,1]
我想要:

[1,2,2,3,2,4,4,4,1]
我只想删除“一个”。我正在尝试
itertools.groupby
,但我还没有找到一种方法。

您可以使用分组键来保留键或保留返回的组:

l = [1,1,1,2,2,3,2,4,4,4,1]

from itertools import chain, groupby

list(chain.from_iterable([k] if k==1 else v for k,v in groupby(l)))
# [1, 2, 2, 3, 2, 4, 4, 4, 1]

如果在列表的开头搜索,则无需导入模块即可完成此操作,还可以在for循环中迭代元素:

your_list = [1,1,1,2,2,3,2,4,4,4,1]
for index, element in enumerate(your_list):
    if element != 1:
        break
if index:
    result = your_list[index-1:]
else:
    result = your_list
这将检查一个,直到找到另一个数字。另一个数字-1的索引是列表的开始


如果列表中没有1,
索引将为零,并返回原始列表。

逻辑是什么?是否要删除所有重复的?字符串开头的所有重复项?不管值是多少,字符串开头的所有副本?最终它与副本中的解决方案非常相似;使用
groupby
,它返回类似
(1,(1,1,1))
的元组,您只需根据是否为
1
来决定是使用第一项还是第二项……模式是:如果存在重复的“1”,则应删除。另一个例子:从[1,1,1,2,2,3,2,1,1,1,4,4,1,1,1,1,1,1]到[1,2,3,2,1,4,4,4,1]很好的一个,还有一个类似的方法
sum([[1]如果i==1 else list(j)表示groupby(a)],[])
注意,尽管@Nagakiran,它比必要的复杂度更高请注意,这假设搜索的值位于列表的开头,并且它假设只应消除第一次出现的重复(此要求不清楚)…哦,谢谢,我假设了,并将编辑我的答案