比较 Python 列表中的重叠元组值

社会演员多 python 276

原文标题Compare overlapping tuple values in a list of Python

我有两个列表,比如说km具有开始和结束值的元组,即范围。我需要检查km之间是否有任何值重叠,如果是,那么我必须增加一个变量,比如说tp。在列表中k,如果在listm中没有找到重叠的元组,则必须增加另一个变量fp。同样,在listm中,如果在k中没有找到重叠的元组,则增加另一个变量fn

以下是列表中的值:

k = [(76, 166), (273, 384), (472, 659), (820, 860), (970, 999), (1129, 1180)]

m = [(46, 125), (428, 507), (620, 699)]

我尝试了以下但它给出了错误int object is not subscriptable

k = [(76, 166), (273, 384), (472, 659), (820, 860), (970, 999), (1129, 1180)]

m = [(46, 125), (428, 507), (620, 699)]

tp = fp = fn = 0

for x in k:
    for y in m:
        if((y[0]>x[0]) and (y[0]<x[1])):
            tp = tp + 1
        elif((y[1]>x[0]) and (y[1]<x[1])):
            tp = tp + 1
        else:
            fp = fp + 1
print("tp: ", tp)
print("fp: ", fp)

原文链接:https://stackoverflow.com//questions/71476132/compare-overlapping-tuple-values-in-a-list-of-python

回复

我来回复
  • maya的头像
    maya 评论

    如果忽略单个值会起作用,看看这是不是你想要的效果:

    k = [(76, 166), (273, 384), (472, 659), (820, 860), (970, 999), (1129, 1180)]
    
    m = [(46, 125), (428, 507), (620, 699)]
    
    tp = fp = fn = 0
    
    for x in k:
        for y in m:
            if (x[0] < y[0] < x[1]) or (x[0] < y[1] < x[1]):
                tp += 1
            else:
                fp += 1
    print("tp: ", tp)
    print("fp: ", fp)
    
    2年前 0条评论