元组列表中的唯一项列表

时间:2011-09-28 23:46:15

标签: python list tuples

我有一个像这样的元组列表:mylist = [(1,2,3),(6,1,1),(7,8,1),(3,4,5)]。如果我使用列表推导slist = [item for sublist in mylist for item in sublist],我可以获得slist = [1,2,3,6,1,1,7,8,1,3,4,5]

如果slist [1,2,3,6,7,8,4,5]只需要{{1}}中的唯一元素,我该如何修改?

4 个答案:

答案 0 :(得分:9)

使用set代替列表。

set(slist)

如果确实需要它作为列表,那么您可以将其转换回列表:

slist = list(set(slist))

请注意,此转换不会保留元素的原始顺序。如果您需要相同的订单,可以使用它:

>>> result = []
>>> seen = set()
>>> for innerlist in mylist:
        for item in innerlist:
            if not item in seen:
                seen.add(item)
                result.append(item)
>>> result
[1, 2, 3, 6, 7, 8, 4, 5]

答案 1 :(得分:4)

您可以使用itertools.chain.from_iterable然后将结果传递给set,这样只会保留唯一元素,从而使您的第一部分变得更容易:

>>> mylist = [(1,2,3),(6,1,1),(7,8,1),(3,4,5)]
>>> import itertools
>>> set(itertools.chain.from_iterable(mylist))
set([1, 2, 3, 4, 5, 6, 7, 8])

答案 2 :(得分:2)

import itertools
chain = itertools.chain(*mylist)
print(set(chain))

取自Flattening a shallow list in Python并适用于此问题。

答案 3 :(得分:1)

你应该使用python集http://docs.python.org/library/sets.html

set(yourlist)

它会起作用