检查列表范围是否在另一个列表范围内

2024-10-04 01:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查一个列表的范围是否在下一个列表的范围内,下面是一个示例:

pos = [[50, 100], [50, 200], [250, 1500], [300, 2000], [300, 3300]]

我们在这里可以看到,pos[0]pos[1][50, 100]包含在[50, 200]中)的范围内,pos[2]与{}和{}的范围相同。在

为此,我创建了一个返回布尔值的函数:

^{pr2}$

它看起来很难看,有谁能提出另一个解决方案吗?在

编辑:

正如@MKesper建议的那样,我还应该使用一个循环迭代列表项(也许可以得到每个位置的True/False列表)。在


Tags: 函数posfalsetrue编辑示例列表解决方案
2条回答

您知道范围[a,b]在给定的c <= a和{}的范围内(因此a,b夹在c,d或{}之间,但我们假设a < b始终保持不变)。因此,您可以简单地使用:

def in_list(pos,i):
    a,b = pos[i]
    c,d = pos[i+1]
    return c <= a and b <= d

如果您想检查是否存在任何此类情况,可以使用:

^{pr2}$

将列表与其移位副本压缩/交错,然后检查以前的项是否包含在该范围内。在

一个计算所有元素的线性函数:

pos = [[50, 100], [50, 200], [250, 1500], [300, 2000], [300, 3300]]

result = [all(x1 <= a  <= y1 for a in t) for t,(x1,y1) in zip(pos,pos[1:])]


print(result)

结果:

^{pr2}$

(结果当然少了1项:最后一项不合格/未经测试)

也许all是过度杀戮,因为只有2个值要测试,所以另一个替代方法可以是:

result = [x1 <= x0 <= y1 and x1 <= y0 <= y1  for (x0,y0),(x1,y1) in zip(pos,pos[1:])]

相关问题 更多 >