Python:从“元组列表”中生成“元组集”,但不考虑顺序
如果我有如下的元组列表:
[('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
我想删除重复的元组(就内容和内部项目的顺序而言是重复的),以便输出为:
[('a', 'b'), ('c', 'd')]
要么
[('b', 'a'), ('c', 'd')]
我试图将其转换为一组,然后向列表中,但输出将保持两者('b', 'a')
并('a', 'b')
在结果集!
-
尝试这个 :
a = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')] b = list(set([ tuple(sorted(t)) for t in a ])) [('a', 'b'), ('c', 'd')]
让我们分解一下:
如果对元组进行排序,它将成为已排序的列表。
>>> t = ('b', 'a') >>> sorted(t) ['a', 'b']
对于每个元组
t
中a
,排序并转换回一个元组。>>> b = [ tuple(sorted(t)) for t in a ] >>> b [('a', 'b'), ('c', 'd'), ('a', 'b'), ('a', 'b')]
将结果列表转换
b
为set:值现在是唯一的。将其转换回列表。>>> list(set(b)) [('a', 'b'), ('c', 'd')]
等等!
请注意,您可以
b
通过使用生成器而不是列表理解来跳过中间列表的创建。>>> list(set(tuple(sorted(t)) for t in a)) [('a', 'b'), ('c', 'd')]