Python 比较数据类型不同但值相同的元组

Python compare tuples with different data types but same values

我正在尝试比较两个元组以确定是否存在差异。 我使用的代码没有解决我的问题,因为我不关心值是否有不同的类型。在示例中,我不关心值“1”是字符串还是整数。我想将这些元组视为相等。我怎样才能做到这一点?

tup1 = (1,2,3)
tup2 = ('1',2,3) # the difference is value 1 is of string data type
pprint(tup1 == tup2) # returns false
pprint(list(set(tup1) - set(tup2))) # returns [1]

您可以将所有内容都转换为 str,然后进行比较:

pprint([str(x) for x in tup1] == [str(x) for x in tup2])

或者:

all(str(x) == str(y) for x, y in zip(tup1, tup2))

或者:

map(str, tup1) == map(str, tup2)
tup1 = (1,2,3)
tup2 = ('1',2,3)

print(map(str,tup2))== map(str,tup1)) # tuple(map.. python 3

或者,如果您知道它们在一个中都是整数,在另一个中是字符串数字和整数的混合,则只需投射一个:

tuple(map(int, tup2)) == tup1

如果您使用的是 python 2,则可以使用 itertools.izipitertools.imap:

from itertools import imap, izip

print(all(x == y for x,y in izip(imap(str, tup2),imap(str, tup1))))

如果你只关心intstr之间(一般来说,任何可以转换为int的对象),你可以在比较之前将每个元素转换为int:

tuple(map(int,tup1)) == tuple(map(int,tup2))