python – 如何使用列表推导删除列表中相邻的重复元素? [重复]

这个问题已经在这里有一个答案:            >            Remove adjacent duplicate elements from a list                                    15个答案                                有没有办法使用列表推导在python过滤相邻的重复列表?

这是我的意思的一个例子:

>>> xs = [1,2,2,3]
>>> print added.reAdj(xs)
[1,2,3]

通过SE的搜索显示了一个earlier inquiry,提出了一个类似但略有不同的问题:是否可以从列表中删除所有重复的内容,但不是明确要求涉及列表推导的解决方案。使用列表推导的动机具体来自于their advantages over traditional for loops的识别。用户建议使用set()函数或标准循环:

result = []
most_recent_elem = None
for e in xs:
    if e != most_recent_elem:
        result.append(e)
        most_recent_elem = e

set()建议不能满足任务,因为不相邻的重复项被删除,而循环是有效的但是冗长的。

它似乎是一个方法来安全地引用列表解析中的下一个元素,如下所示。

[x for x in xs if x != **x.next()**]

有任何想法吗?

您可以使用list comprehensionenumerate与@AChampion建议的解决方案:

xs = [1,2,2,2,1,1]
In [115]: [n for i, n in enumerate(xs) if i==0 or n != xs[i-1]]
Out[115]: [1, 2, 1]

该列表理解返回项目,如果它是第一个或以下,如果它不等于以前。由于对if语句的懒惰评估,它将工作。

http://stackoverflow.com/questions/34985845/how-to-remove-adjacent-duplicate-elements-in-a-list-using-list-comprehensions

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 如何使用列表推导删除列表中相邻的重复元素? [重复]