首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有一个整数区间,它包含一些内部区间。给定这些间隔,我想计算一个列表,包括

我有一个整数区间,它包含一些内部区间。给定这些间隔,我想计算一个列表,包括
EN

Stack Overflow用户
提问于 2022-11-22 11:32:10
回答 3查看 21关注 0票数 1

内部间隔总是在全局间隔内。所有的间隔都是整数的,左闭的,右开的.

以这个例子为例。“全局”间隔为[0,22]。“内部”间隔为[3,6[和[12,15]]。

对于这个例子,我期望:[0,3][U [3,6][U [6,12]]U [12,15]U [15,22]

我尝试过定义一个函数,但是在迭代间隔时,我却弄乱了索引。

代码语言:javascript
复制
def allspans(r, spans):
    pass

allspans((0, 22), [(3,6), (12,15)])  # expected : [(0, 3), (3, 6), (6, 12), (12, 15), (15, 22)]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-11-22 11:39:06

是的,您必须迭代您的spans,但是要注意保持一个位置,以正确地填充中间的空格。

代码语言:javascript
复制
from typing import Generator

def allspans(r, spans) -> Generator:
    pos = 0
    for lower, upper in spans:
        if pos < lower:
            yield pos, lower
        yield lower, upper
        pos = upper
    if pos <= r[1]:
        yield pos, r[1]

我发现使用Generator更容易。只需使用list()将其转换为List

代码语言:javascript
复制
list(allspans((0, 22), [(3,6), (12,15)]))  # [(0, 3), (3, 6), (6, 12), (12, 15), (15, 22)]
票数 1
EN

Stack Overflow用户

发布于 2022-11-22 11:47:32

使用普通循环:

代码语言:javascript
复制
def allspans(r, spans):
    intervals = []
    intervals.append((r[0], spans[0][0]))

    for i in range(len(spans)):
        current_span = spans[i]
        if i != 0:
            intervals.append((spans[i - 1][1], current_span[0]))
        intervals.append((current_span[0], current_span[1]))

    intervals.append((spans[-1][1], r[1]))

    return intervals


print(allspans((0, 22), [(3, 6), (12, 15)]))
# [(0, 3), (3, 6), (6, 12), (12, 15), (15, 22)]
票数 1
EN

Stack Overflow用户

发布于 2022-11-22 12:03:35

使用itertools.chainitertools.pairwise (Python3.10+):

代码语言:javascript
复制
from itertools import chain, pairwise

def all_spans(r, spans):
    start, end = r
    it = chain((start,), chain.from_iterable(spans), (end,))
    return [t for t in pairwise(it) if t[0] != t[1]] 

首先,我们按照顺序在所有区间端点上构造一个迭代器it;然后子范围是所有连续端点的对,不包括两个连续端点相等的空子范围。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74531960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档