在python中组合列表元素?

时间:2013-01-23 22:04:27

标签: python

  

可能重复:
  How do you remove duplicates from a list in Python whilst preserving order?

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

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]

我该如何管理?提前谢谢。

5 个答案:

答案 0 :(得分:3)

将其转换为集合:

a = list(set(a))

答案 1 :(得分:3)

您可以使用itertools中的unique_everseen recipe,维护订单。

如果订单不重要,请使用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

答案 2 :(得分:2)

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

a = list(set(a)) 

答案 3 :(得分:1)

import itertools
a = [k for k, g in itertools.groupby(a)]

这假定原始列表中的重复项已经分组,如您的示例所示。与使用set()相比,此方法的好处是可以保留原始订单。

答案 4 :(得分: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]