一尘不染

如何在python中找到范围重叠?

python

Python中确定两个范围中的哪些值重叠的最佳方法是什么?

例如:

x = range(1,10)
y = range(8,20)
(The answer I am looking for would be the integers 8 and 9.)

给定一个范围x,最好的方法是迭代另一个范围y并输出两个范围共享的所有值?在此先感谢您的帮助。

编辑:

作为后续,我意识到我还需要知道x是否与y重叠。我正在寻找一种方法来遍历范围列表,并做一些范围重叠的其他事情。是否有简单的True / False语句来完成此操作?


阅读 600

收藏
2020-08-03

共2个答案

一尘不染

尝试设置交集:

>>> x = range(1,10)
>>> y = range(8,20)
>>> xs = set(x)
>>> xs.intersection(y)
set([8, 9])

请注意,intersection接受任何可迭代的参数作为参数(y不需要将其转换为该操作的集合)。有一个等效于该intersection方法的运算符:&但是,在这种情况下,它要求两个参数都必须是set

2020-08-03
一尘不染

如果步长始终为+1(这是范围的默认值),则以下步骤应比将每个列表转换为集合或遍历任一列表更为有效:

range(max(x[0], y[0]), min(x[-1], y[-1])+1)
2020-08-03