如何检查范围是否是Python 3.x中另一个范围的一部分

mr.*_*lle 5 python range python-3.x

我怎样才能简单地检查范围是否是另一个范围的子范围?

range1 in range2 不会按预期工作.

jon*_*rpe 11

你可以这样做O(1),如下:

def range_subset(range1, range2):
    """Whether range1 is a subset of range2."""
    if not range1:
        return True  # empty range is subset of anything
    if not range2:
        return False  # non-empty range can't be subset of empty range
    if len(range1) > 1 and range1.step % range2.step:
        return False  # must have a single value or integer multiple step
    return range1.start in range2 and range1[-1] in range2
Run Code Online (Sandbox Code Playgroud)

正在使用:

>>> range_subset(range(0, 1), range(0, 4))
True
Run Code Online (Sandbox Code Playgroud)


mr.*_*lle 4

set((range(0,1))).issubset(range(0,4))会做的。

  • 这可行,但对于大范围来说可能效率低下。例如,一百万个整数长的范围必须构造一个包含一百万个项目的集合。 (4认同)