我有两个说法,我正在将机器人转换为元组。两个dict都包含相同的元素,但它们不是使用相同的逻辑生成的。
例如,假设我有一个像这样的元组:
(('a',5),('n',4),('c',8))
第二个元组是这样的:
(('c',8),('n',4),('a',5))
他们原来的说法是这样的(可能,我不知道如何在dict中对元素进行排序,但是它们是由包含相同元素的两个dicts生成的(不多也不少):
{'a':5,'c': 8,'n':4}
对于一个人而言,两个元组都是相似的,但对于一个计算机则不然。
我如何检查两个元组是否相似?
答案 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] )