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

时间:2015-03-11 12:26:08

标签: python comparison tuples

我正在尝试比较两个元组以确定是否存在任何差异。 我使用的代码并没有解决我的问题,因为我不关心值是否有不同的类型。在这个例子中,我不在乎是否值" 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]

3 个答案:

答案 0 :(得分:2)

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

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

或者如果你知道它们都是一个整体,而另一个是字符串数字和ints的混合物,那么只需投一个:

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))))

答案 1 :(得分: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)

答案 2 :(得分:1)

如果您的关注只在intstr之间(通常,任何可以转换为int的对象),您可以在比较之前将每个元素转换为int:

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