差不多我需要编写程序,以检查如果列表中有任何重复,并且其将它们移除并返回未复制删除的项的新列表。这是我的了,但老实说我不知道怎么办。

def remove_duplicates():
    t = ['a', 'b', 'c', 'd']
    t2 = ['a', 'c', 'd']
    for t in t2:
        t.append(t.remove())
    return t
2011-11-01 00:45:24
问题评论:

您正在尝试在两个列表中删除显示的元素吗?还是在一个列表中出现多次的元素?

您的描述说,"列表"查找重复项,但您的代码将检查两个列表。

您希望您的结果作为['a','b','c','d']或只是[d]?

回答:

常用的方法要获取的项的唯一集合是使用的set集是无序不同对象的集合。若要从任何 iterable 创建一组,可以只是将其传递到内置的set()函数中。如果您以后再次需要真实的列表,同样可以传递给list()函数的集合。

下面的示例应该涵盖任何想要做︰

>>> t = [1, 2, 3, 1, 2, 5, 6, 7, 8]
>>> t
[1, 2, 3, 1, 2, 5, 6, 7, 8]
>>> list(set(t))
[1, 2, 3, 5, 6, 7, 8]
>>> s = [1, 2, 3]
>>> list(set(t) - set(s))
[8, 5, 6, 7]

如您可以看到的示例结果中,不维护原始顺序。如上所述,集本身是无序集合,所以次序丢失。当转换集返回到列表,请创建任意顺序。

如果顺序很重要对您,您将需要使用不同的机制。此问题涉及该主题的详细信息。

我在许多不同的语言进行编程,因此我倾向于使用样式我最熟悉PEP8 并不是每个人都不得不遵循,这样的人真的应该停止批评它的人一个规则集。

我同意,需要服用盐颗粒 PEP 8。在这种情况下,大多数 Python 程序员认为代码可奇怪外形和分散注意力。在大多数语言, set(t)应首选通过set( t ).

应注意此删除原始订单。

我认为该示例 @Kos 显示。

应注意还它不起作用是否您的列表上有 dicts。

FWIW,新 (v2.7) 从 iterable 消除重复,同时保持其原始订单中的 Python 办法是︰

>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys('abracadabra'))
['a', 'b', 'r', 'c', 'd']

我认为这是顺序保留项的唯一办法。

也是这其中您循环访问列表元素置于一套临时的同时非常不错的解决方案。

@HerberthAmaral︰ 非常真远,请参阅如何执行重复项从列表中删除在 Python 中同时保留订单?

@MartijnPieters Correcting︰ 我认为这是顺序保留项目的只有简单的办法。

值得注意的, fromkeys()dict接纳任何序列对象继承的方法。例如, ['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']

它是一行式命令︰ list(set(source_list))会达到目的。

set的一点可能是不能有重复项。

我使用该所有的时间。也许它不,它 pythonic-但确保有效-也许不保留该订单,但我通常不会关注这一方面。

>>> t = [1, 2, 3, 1, 2, 5, 6, 7, 8]
>>> t
[1, 2, 3, 1, 2, 5, 6, 7, 8]
>>> s = []
>>> for i in t:
       if i not in s:
          s.append(i)
>>> s
[1, 2, 3, 5, 6, 7, 8]

我更喜欢此选项 a) 它保留顺序和 b) 使用cmp而不是哈希进行比较的对象在列表中,有为我数次发生的问题。

我更喜欢它,以及它适用于 unhashable 类型还

请注意此方法 O(n^2) 时间工作,因此还是很慢或大型列表上。

我 upvote 这因为集的广泛建议的用法不能正常工作,如果我有一个列表的列表。

只是为了完整的︰ 在 unhashables,如所述,设置不起作用,几乎所有的可变类型是 unhashable。不只是列表 (无论的列表),但也 dict,等等。

如果您不介意的顺序,只需执行此操作︰

def remove_duplicates(l):
    return list(set(l))

set一个保证没有重复项。

内容来源于Stack Overflow Removing duplicates in lists
请输入您的翻译

Removing duplicates in lists

确认取消