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.izip
和 itertools.imap
:
from itertools import imap, izip
print(all(x == y for x,y in izip(imap(str, tup2),imap(str, tup1))))
如果你只关心int
和str
之间(一般来说,任何可以转换为int
的对象),你可以在比较之前将每个元素转换为int:
tuple(map(int,tup1)) == tuple(map(int,tup2))
我正在尝试比较两个元组以确定是否存在差异。 我使用的代码没有解决我的问题,因为我不关心值是否有不同的类型。在示例中,我不关心值“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.izip
和 itertools.imap
:
from itertools import imap, izip
print(all(x == y for x,y in izip(imap(str, tup2),imap(str, tup1))))
如果你只关心int
和str
之间(一般来说,任何可以转换为int
的对象),你可以在比较之前将每个元素转换为int:
tuple(map(int,tup1)) == tuple(map(int,tup2))