我有一个有重复项的有序列表(比较相等的对象),我想删除重复项。因为我想维持秩序,所以无法使用集合
。
我的列表中的重复项不会一个接一个地出现,我希望保留最后出现的项。在这篇相关的文章中,似乎只保留了第一次出现的重复。
作为我简化的例子,这是我想要的:
list_with_duplicates = [1, 2, 1, 3, 2, 1]
list_without_duplicates = [3, 2, 1]
我唯一能想到的是一个混乱的实现,使用多次迭代首先保存每个副本的最后一次出现,然后使用最后出现的副本的顺序重新创建原始列表。
有序的dict解决方案看起来非常整洁:
>>> x = [1, 2, 1, 3, 2, 1]
>>>
>>> from collections import OrderedDict
>>> list(reversed(OrderedDict.fromkeys(reversed(x))))
[3, 2, 1]
或:
>>> list(OrderedDict.fromkeys(x[::-1]))[::-1]
[3, 2, 1]
您可以使用'::-1'反转列表:
>>> result = []
>>> for item in l[::-1]:
... if item not in result:
... result.append(item)
...
>>> result[::-1]
[3, 2, 1]
>>>
在链接的副本中使用您喜欢的任何答案(例如顶部的答案),并进行一项更改:在迭代列表之前将其反转,并在完成后反转结果。
def rem_rev(seq):
seen = set()
seen_add = seen.add
return [x for x in seq[::-1] if not (x in seen or seen_add(x))][::-1]
# ^^^^^^ ^^^^^^
# or reversed(seq)
我的变量如下所示: 我需要的是删除列表中的最后一个!我尝试检查文档,在上使用了函数,但不起作用。有什么想法或线索吗?谢谢!
问题内容: 我只在前两个元素相同的情况下才尝试从嵌套列表中删除重复项,而忽略了第三个元素… 清单: 将返回: 我在这里找到了一种类似的简单方法: 但这仅适用于第一个元素而不适用于第一个2元素,而这正是我想要的。 问题答案: 如果顺序无关紧要,则可以使用相同的方法,但是将第一和第二个元素的元组用作键: 或在Python 2.7及更高版本上: 而不是您可以使用,而是使用您认为更具可读性的内容。
问题内容: Google Python类| 清单练习- 给定一个数字列表,返回一个列表,其中所有相邻的==元素都已简化为单个元素,因此[1、2、2、3]返回[1、2、3]。您可以创建一个新列表或修改传入的列表。 我使用新列表的解决方案是- 问题甚至暗示可以通过修改传入列表来完成。但是,python文档警告不要在使用for循环迭代列表时修改元素。 我想知道除了遍历列表之外还能做些什么呢?我不是在寻找
我下面有一个类,想删除包含同名的重复人,如何使用Java8 Lambda,预计列表包含下面的p1、p3。
问题内容: 鉴于: 我想删除第一个项目中的那个项目。因此,在这种情况下,我们将删除以: 我当前的代码是: 这可行,但是很慢。什么是更好的方法呢? 编辑:我之前没有测试过性能,所以我可能做错了,但是我得到了: 问题答案: 反向删除,就地修改: 就地修改意味着这样做效率更高,因为它不会创建新列表(如列表理解那样)。 由于OP要求提供高效的解决方案,因此这里比较了两个投票最高的答案。 设定 - 清单理解
我试图编写一个代码,它接收并删除该中的重复字符。 例如。如果,则应返回。到目前为止,我的代码只返回与给定的相同的tekst…