从列表中删除重复的元组

时间:2018-07-17 18:41:41

标签: python python-3.x list duplicates tuples

请考虑以下元组列表。

['href']

在此列表中,我拥有与hrefx = [[(1, 31), (3, 22), (29, 23), (31, 1)], [(32, 0), (34, 44), None, (44, 34)]] 类似的值。因此,我需要从(1,31)创建一个仅包含唯一值的列表。如何做到这一点?天真地,我尝试通过基于以下条件从(31,1)创建一个新列表来解决此问题:如果元组中的第一个值大于第二个,则不要将该值添加到列表中,否则请添加该值。但是,可以看出x不满足此条件,但所有其他值都满足。

Edit1:所需的输出应采用以下格式。每个子列表必须仅包含上述条件定义的唯一值:

x

1 个答案:

答案 0 :(得分:1)

您可以像这样使用列表理解(假设您希望将逻辑应用于列表的每个子列表):

ordered_x = [[tuple(sorted(y)) if isinstance(y,tuple) else y for y in sublist] for sublist in x]
new_x = [list(set(sublist)) for sublist in ordered_x]

print(new_x)
>>> [[(23, 29), (3, 22), (1, 31)], [(0, 32), None, (34, 44)]]

如果您希望从所有子列表的元素集合中删除所有重复项,请使用以下方法:

ordered_x = [tuple(sorted(y)) if isinstance(y,tuple) else y for sublist in x for y in sublist]
new_x = list(set(ordered_x))

print(new_x)
>>> [(0, 32), (3, 22), (23, 29), None, (34, 44), (1, 31)]