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,它比必要的复杂度更高请注意,这假设搜索的值位于列表的开头,并且它假设只应消除第一次出现的重复(此要求不清楚)…哦,谢谢,我假设了,并将编辑我的答案