如何展平元组列表并删除重复项?

时间:2016-04-04 19:27:06

标签: python

我试图从列表中的元组中删除重复项,并将它们添加到一个没有重复项的新列表中,

我尝试制作两个循环,但检查重复或设置但问题是三个元组

任何人都可以帮助我,我被困在这里

示例

[(2, 5), (3, 5), (2, 5)]

输出

[2, 3, 5]

4 个答案:

答案 0 :(得分:5)

如果订单不重要,你可以制作一个set,将每个元组的每个元素添加到集合中,然后设置就是你的结果。

s = set()
for tup in lst:
    for el in tup:
        s.add(el)
# or use a set comprehension:
# # s = {el for tup in lst for el in tup}

如果订单很重要,您可以大致相同,但也可以添加结果列表。

s = set()
result = []
for tup in lst:
    for el in tup:
        if el not in s:
            s.add(el)
            result.append(el)

答案 1 :(得分:2)

你可以使用set comprehension:

QObject

答案 2 :(得分:2)

你需要通过每个元组然后元组的每个元素。在追加之前,只需检查元素是否在列表中:

a = [(2, 5), (3, 5), (2, 5)]
b = []
for i in a:
    for j in i:
        if j not in b:
           b.append(j)
print b

运行上面的代码后,我得到了这个输出:

[2, 5, 3]

答案 3 :(得分:1)

一种简单的方法是使用numpy ravel,然后设置:

import numpy as np
lst = [(2, 5), (3, 5), (2, 5)]
res = list(set(np.ravel(a)))

给出:

[2, 3, 5]

回答Apero的评论:

如果您不想使用numpy,您可以使用以下内容展平列表:

lst = [(2,5), (3,5), (2,5)]
tmp = []
for i in lst:
    for j in i:
        tmp.append(j)

res = set(tmp)
print res

给出:

[2, 3, 5]