擅长:python、mysql、java
<p>您应该创建一个tuple子类并更改它的相等方法(<code>__eq__</code>):</p>
<pre><code>class UnorderedTuple(tuple):
def __eq__(self, other):
return len(self) == len(other) and set(self) == set(other)
</code></pre>
<p>适用于您的情况(tuple length==2,如果元组元素是散列的-这是不可变的,并且有一个定义良好的比较)</p>
<p>要将元组列表转换为无序元组列表,请执行以下操作:</p>
^{pr2}$
<p>要对列表进行正确的包含查询(使用<code>in</code>运算符)可能会很慢,因此最好使用集合而不是列表:</p>
<pre><code>set_f1 = { UnorderedTuple(f_) for f_ in f1 }
(6,1) in set_f1
(1,6) in set_f1
</code></pre>
<p>这个实现的性能不是很好,因为它为每个比较创建一个新的<code>set</code>。因此,如果元组总是f两个元素,那么将<code>__eq__</code>方法取消制冷会更有效,如下所示:</p>
<pre><code> def __eq__(self, other):
return super(UnordoredTuple, self).__eq__(other) or (self[0] == other[1] and self[1] == other[0])
</code></pre>