将元组与不按顺序的元素进行比较

时间:2017-01-16 21:44:31

标签: python dictionary tuples

我有两个说法,我正在将机器人转换为元组。两个dict都包含相同的元素,但它们不是使用相同的逻辑生成的。

例如,假设我有一个像这样的元组:

(('a',5),('n',4),('c',8))

第二个元组是这样的:

(('c',8),('n',4),('a',5))

他们原来的说法是这样的(可能,我不知道如何在dict中对元素进行排序,但是它们是由包含相同元素的两个dicts生成的(不多也不少):

{'a':5,'c': 8,'n':4}

对于一个人而言,两个元组都是相似的,但对于一个计算机则不然。

我如何检查两个元组是否相似?

5 个答案:

答案 0 :(得分:4)

tuple进行排序并进行比较。例如:

>>> tuple_1 = (('a',5),('n',4),('c',8))
>>> tuple_2 = (('c',8),('n',4),('a',5))

# Non-sorted --> unequal; issue you are currently facing
>>> tuple_1 == tuple_2
False

# comparing sorted tuples -- equal 
>>> sorted(tuple_1) == sorted(tuple_2)
True

如果两个元组的元素都是唯一,您也可以使用set进行比较:

>>> set(tuple_1) == set(tuple_2)
True

作为旁注,您无需将dict转换为tuple即可比较词典的内容。您可以直接将dict个对象比较为:

>>> {1: 2, 3: 4} == {3: 4, 1: 2}
True

答案 1 :(得分:2)

您还可以将元组转换为dict,然后进行比较。

不确定这是否更快/更慢/与排序相同。

dict(t1) == dict(t2)

答案 2 :(得分:1)

def similarTuple(a,b):
    h = {}
    for e in a:
        h[e] = True
    for e in b:
        if e not in h:
            return False
    return True

答案 3 :(得分:0)

你也可以制作一组两个元组并比较它们:

a = (('a', 0), ('b', 1), ('c', 2))
b = (('b', 1), ('a', 0), ('c', 2))
set(a) == set(b)

答案 4 :(得分:0)

尝试一个班轮,探索从列表推导中获得bool结果

效率不高,可能很有趣

def SameElementsP(a,b):
    return not ( [1 for e in a if e not in b] or [1 for e in b if e not in a] )