元组列表中的唯一项列表

5 投票
4 回答
10123 浏览
提问于 2025-04-17 03:19

我有一个包含元组的列表,像这样: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],我该怎么改呢?

4 个回答

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

这段内容摘自在Python中将一个浅层列表扁平化的问题,并根据这个问题进行了调整。

11

用一个集合来代替列表。

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]
9

其实,你可以通过使用 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])

撰写回答