如果相同则删除元组对

时间:2018-11-06 09:24:51

标签: python list compare tuples

我在python中遇到元组问题。我有以下元组列表:

gamma2 = [[('p', 'u'), ('r', 'w')], [('p', 'w'), ('r', 'u')], [('r', 'u'), ('p', 'w')],[('r', 'w'), ('p', 'u')]]

现在,[('p', 'u'), ('r', 'w')][('r', 'w'), ('p', 'u')]这两个部分对我来说都是一样的,[('p', 'w'), ('r', 'u')][('r', 'u'), ('p', 'w')]也是一样。

所以我想删除列表中的这些重复项之一,但是我不知道如何。

我尝试使用哈希表和set,但是问题在于,该元组对与哈希表不同,它将由gamma2.add()添加。

那么你有个主意吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用元组ans集

gamma2 = [[('p', 'u'), ('r', 'w')], [('p', 'w'), ('r', 'u')], [('r', 'u'), ('p', 'w')],[('r', 'w'), ('p', 'u')]]
set([tuple(set(x)) for x in gamma2])

在某些情况下,最好在sorted内使用set代替(感谢@rockikz)

set([tuple(sorted(x)) for x in gamma2])

第三个解决方案是使用frozenset

set([frozenset(x) for x in gamma2])

将为您提供结果:

{(('p', 'w'), ('r', 'u')), (('r', 'w'), ('p', 'u'))}

set-唯一值列表

  • set内部循环-需要引导项目以使它们相等
  • 接下来仅将元组用作糖来进行外部设置
  • 以及我们用来获取唯一值的最后一组

,如果您想在结果中使用相同的类型,则可以执行以下操作:

[list(y) for y in set([tuple(set(x)) for x in gamma2])]

会给你

[[('r', 'w'), ('p', 'u')], [('p', 'w'), ('r', 'u')]]