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

Mor*_*itz 5 python list duplicates

我的问题与此类似,但我没有删除完整的重复项,而是想从python中的列表中删除连续的部分"重复项".

对于我的特定用例,我想从列表中删除连续使用相同字符的单词,我希望能够定义该字符.对于这个例子,它是#,所以

['#python', 'is', '#great', 'for', 'handling', 
'text', '#python', '#text', '#nonsense', '#morenonsense', '.']
Run Code Online (Sandbox Code Playgroud)

应该成为

['#python', 'is', '#great', 'for', 'handling', 'text', '.']
Run Code Online (Sandbox Code Playgroud)

tob*_*s_k 5

你可以使用itertools.groupby:

>>> from itertools import groupby
>>> lst = ['#python', 'is', '#great', 'for', 'handling', 'text', '#python', '#text', '#nonsense', '#morenonsense', '.']    
>>> [s for k, g in ((k, list(g)) for k, g in groupby(lst, key=lambda s: s.startswith("#")))
...    if not k or len(g) == 1 for s in g]
...
['#python', 'is', '#great', 'for', 'handling', 'text', '.']
Run Code Online (Sandbox Code Playgroud)

这会根据元素是否以a开头#,然后仅使用那些不存在的元素或组仅具有单个元素的元素来对元素进行分组.


jpp*_*jpp 3

这是一种使用itertools.groupby. 这个想法是根据第一个字符是否等于给定的来对项目进行分组k。然后应用你的 2 个标准;如果他们不满意,您可以交出物品。

L = ['#python', 'is', '#great', 'for', 'handling', 'text',
     '#python', '#text', '#nonsense', '#morenonsense', '.']

from itertools import chain, groupby

def list_filter(L, k):
    grouper = groupby(L, key=lambda x: x[0]==k)
    for i, j in grouper:
        items = list(j)
        if not (i and len(items) > 1):
            yield from items

res = list_filter(L, '#')

print(list(res))

['#python', 'is', '#great', 'for', 'handling', 'text', '.']
Run Code Online (Sandbox Code Playgroud)