首页 > 解决方案 > python在列表中查找相似性

问题描述

我希望有一个功能可以列出一个列表并根据灵敏度给我类似的数字[4,4.01,3.9][71,69,72]

我尝试减去每个值,如果它小于灵敏度,则将这些数字添加到元组中,例如:

abs(4 - 4.01)= 0.01 => 0.01 < 0.5 => result += [(4,4.01)]

或者

abs(4.01 - 3.9)= 0.11 => 0.11 < 0.5 => result += [(4.01,3.9)]

但它的输出是

[(4, 4.1), (4, 3.9), (4.1, 4), (4.1, 3.9), (3.9, 4), (3.9, 4.1)]

我不想要这个我想要[4.01,4,3.9][4,4.01,3.9,5,10,45]

Python

def collation(arr):
    ret = []
    xi = 0
    while xi < len(arr):
        yi = 0
        while yi < len(arr):
            if (xi == yi):
                yi += 1
                continue
            if (abs(arr[xi] - arr[yi]) <= Sens):
                ret += [(arr[xi], arr[yi])]
            yi += 1
        xi += 1
    return ret

标签: pythonlist

解决方案


您可以使用filter函数来执行此操作,以获得满足您条件的所有这些值:

inlist = [4,4.01,3.9,5,10,45]
point_value = 4
threshold = 0.5
outlist = list(filter(lambda elem: round(abs(elem-point_value),2) <= threshold, inlist))
print(outlist)

输出:

[4, 4.01, 3.9]

推荐阅读