【问题标题】:How to compare these 2 python tuple of tuples of unequal length and output another tuple based on the comparison?如何比较这两个长度不等的元组的python元组并根据比较输出另一个元组?
【发布时间】:2014-06-27 07:25:47
【问题描述】:

我有这个元组的元组;

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

我还有一个元组;

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

我想比较Tup1 和Tup2。根据比较,我想创建另一个元组,如下所示;

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

逻辑是这样的。查看 Tup2 中的每个元素,然后在 Tup1 中查找匹配的元素。如果 Tup1 中有匹配的元素(例如 'AAA'),则复制到 OutputTup ('AAA', 2)。如果没有匹配的元素(例如 'CCC'),则赋值 0 并附加到 OutputTup ('CCC', 0)。

如何在 Python 2.7 中做到这一点?谢谢。

【问题讨论】:

  • 请展示您解决问题的尝试,以便我们可以帮助您解决任何具体问题。
  • 好的。现在就做。坚持,稍等。卡了一段时间。
  • 如果 tup1 中有元素但 tup2 中没有元素会怎样?
  • @yoopoo:它将被忽略。

标签: python python-2.7 tuples


【解决方案1】:

这也适用于您想要的输出:

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

【讨论】:

  • 将元组转换为字典真是太棒了。我在尝试使用 while 循环对元组中的每个元素进行比较时遇到了困难。点赞!
  • 如果第一个值有重复,这将不保留原始信息
  • @yoopoo:谢谢。优雅且易于理解。被选为正确答案。
【解决方案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')]

【讨论】:

  • 谢谢。虽然这不是答案,因为输出元组并不完全是想要的,但我学到了一些关于 itertools 的新东西。赞成。
  • 使用类型?不确定这是否正确。 stackoverflow.com/questions/402504/…
  • nataraj Сундар:谢谢你的回答。您的回答也是正确的,但很抱歉我只能投票给 1 个正确答案。我选择了另一个答案,因为它不需要从另一个模块导入。我也更容易理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 2017-09-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多