-4

可能重复:
如何从 Python 列表中删除重复项,同时保持顺序?

这个问题可能很简单。例如,我有一个这样的列表:

a = [1,1,1,1,2,3,4,5,5,5,5,6,7,7,8,9,14,14]

我不想在我的列表中保留相同的元素。所以,我想把它转换成:

a = [1,2,3,4,5,6,7,8,9,14]

我该如何管理?先感谢您。

4

5 回答 5

4

将其转换为一组:

a = list(set(a))
于 2013-01-23T22:06:31.160 回答
4

您可以使用itertools 中的unique_everseen 配方,它维护顺序。

如果顺序无关紧要,请使用set().

In [294]: a = [1,1,1,1,2,3,4,5,5,5,5,6,7,7,8,9,14,14]

In [295]: list(unique_everseen(a))
Out[295]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 14]

unique_everseen

def unique_everseen(iterable, key=None):
    "List unique elements, preserving order. Remember all elements ever seen."
    # unique_everseen('AAAABBBCCDAABBB') --> A B C D
    # unique_everseen('ABBCcAD', str.lower) --> A B C D
    seen = set()
    seen_add = seen.add
    if key is None:
        for element in ifilterfalse(seen.__contains__, iterable):
            seen_add(element)
            yield element
    else:
        for element in iterable:
            k = key(element)
            if k not in seen:
                seen_add(k)
                yield element
于 2013-01-23T22:07:48.940 回答
2

将列表转换为集合将删除重复项,然后将其转换回列表。

a = list(set(a)) 
于 2013-01-23T22:06:54.037 回答
1
import itertools
a = [k for k, g in itertools.groupby(a)]

这假设原始列表中的重复项已经分组,如您的示例所示。这种方法比使用的好处set()是可以保持原来的顺序。

于 2013-01-23T22:08:03.593 回答
0

或者,如果您需要保留sorted订单:

a = [1,1,1,1,2,3,4,5,5,5,5,6,7,7,8,9,14,14]
sorted(set(a))

结果是:

[1、2、3、4、5、6、7、8、9、14]

于 2013-01-23T22:09:12.917 回答