如何比较这两个长度不等的元组并根据比较输出另一个元组?

0 投票
2 回答
761 浏览
提问于 2025-04-18 11:18

我有一个包含元组的元组;

Tup1= ( ('AAA', 2), ('BBB', 3) )

我还有另一个元组;

Tup2 = ('AAA', 'BBB', 'CCC', 'DDD')

我想比较一下 Tup1Tup2。根据比较的结果,我想创建一个新的元组,里面也包含元组,格式像这样;

OutputTup = ( ('AAA', 2), ('BBB', 3), ('CCC', 0), ('DDD', 0) )

逻辑是这样的:先查看 Tup2 中的每一个元素,然后在 Tup1 中寻找匹配的元素。如果在 Tup1 中找到了匹配的元素(比如 'AAA'),就把它复制到输出元组中,格式是 ('AAA', 2)。如果没有找到匹配的元素(比如 'CCC'),那么就赋值为 0,并添加到输出元组中,格式是 ('CCC', 0)。

请问在 Python 2.7 中怎么实现这个呢?谢谢。

2 个回答

2

请稍微修改一下我的回答。我不知道怎么检查类型。如果有人知道,请随意编辑我的回答。

from itertools import izip,izip_longest
Tup1= ( ('AAA', 2), ('BBB', 3) )
Tup2 = ('AAA', 'BBB', 'CCC', 'DDD')
lis=[ i if type(i[0])==type(0) else i[0] for i in list(izip_longest(Tup1, Tup2 , fillvalue=0))]



#output [('AAA', 2), ('BBB', 3), (0, 'CCC'), (0, 'DDD')]
3

这个方法也能得到你想要的输出:

tup1 = ( ('AAA', 2), ('BBB', 3) )
tup2 = ('AAA', 'BBB', 'CCC', 'DDD')
dic = dict( tup1 )
for tri in tup2:
    dic[tri] = dic.get(tri,0)

print tuple(dic.items()) 
#(('AAA', 2), ('BBB', 3), ('CCC', 0), ('DDD', 0))

撰写回答