我正在尝试比较两个元组以确定是否存在任何差异。 我使用的代码并没有解决我的问题,因为我不关心值是否有不同的类型。在这个例子中,我不在乎是否值" 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]
答案 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.izip
和itertools.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)
如果您的关注只在int
和str
之间(通常,任何可以转换为int
的对象),您可以在比较之前将每个元素转换为int:
tuple(map(int,tup1)) == tuple(map(int,tup2))