【问题标题】:Compare two tuple with variable length in Python在 Python 中比较两个可变长度的元组
【发布时间】:2017-06-15 15:16:31
【问题描述】:

我有两个元组元组,我想根据它们的第一个元素比较值

list1 = ((1, 2450.0), (2, 2095.0), (4, 1290.0), (5, 1190.0), (6, 1150.0), (7, 1150.0), (8, 1090.0), (9, 1090.0))
list2 = ((1, 2673.0), (4, 1488.0), (5, 1139.0), (6, 1057.0), (7, 1482.0), (8, 1037.0), (9, 1169.0), (10, 937.0))

预期的结果应该是

list1 = ((1, 2450.0), (2, 2095.0), (3, nan),(4, 1290.0), (5, 1190.0), (6, 1150.0), (7, 1150.0), (8, 1090.0), (9, 1090.0), (10,nan))
list2 = ((1, 2673.0), (3, nan),(4, 1488.0), (5, 1139.0), (6, 1057.0), (7, 1482.0), (8, 1037.0), (9, 1169.0), (10, 937.0))

这样做的有效方法是什么?

【问题讨论】:

  • 问题没有很好的定义。 (3, nan) 哪里来的?
  • 对不起。现已更正。
  • 你能提供一个你迄今为止尝试过的例子吗?
  • 另外,您确实需要为您的问题添加更多上下文。比较相应的元组后,您对 2 列表究竟做了什么?这对于以任何有意义的方式回答您的问题而无需猜测是必不可少的
  • numpy 标签是故意的吗?您正在比较元组而不是数组。

标签: python numpy tuples


【解决方案1】:

如果我正确理解你的问题,你想检查每个元组是否包含某些数字,这些数字存储在每个子元组的第一个元素中,如果数字不在内部,则创建一个第二个元素等于的子元组无(如果 nan 表示无)。

我会遵循这个过程,这可能不是最有效的。

# Create first a list which contains the desired numbers to be checked
checkTuple = ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 )

# Create a function to check if each number is in one of the sub-tuples
def chooseName( checkTuple, randomList ):
    newList = []
    for checkItem in checkTuple:
        itemFound = False
        for item in randomList:
            if checkItem in item:
                numberFound = True
                break
        if numberFound:
            newList.append( checkItem )
        else:
            newList.append( (checkItem, None) )
    return tuple( newList )

# Call the function and take back the tuple
newList1 = chooseName( checkTuple, list1 )

【讨论】:

  • 如果您要回答,请将您的代码格式化为连贯的内容。此外,OP 没有提供足够的信息来做出您所做的假设。
  • 对不起,我是新人,这是第一次。
  • 感谢您更新代码。请注意,仍有一个明显的问题需要纠正。根据PEP 8 的缩进应该是 4 个空格而不是 2 个。
  • 非常感谢您的反馈!
  • 另外,您不需要创建所需号码的列表。就像在 OPs 示例中一样,很可能一开始就不会知道所有变量。所以不可能总是知道想要的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2013-04-02
  • 1970-01-01
  • 2017-12-24
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多