Python 中的合并区间

问题描述 投票:0回答:3

我对 Python 编程非常陌生,遇到了一个我不知道如何解决的问题陈述。 我有四行输入:

0 1
2 4
6 7
3 5

为了接受这 4 行输入,我可以执行以下操作:

for i in range(4):
    a,b = list(map(int,input().split(' ')))

我应该将间隔合并到(输出)中:

0 1
2 5
6 7

区间 (2,4) 和 (3,5) 应合并为一个 (2,5)。

我不知道该怎么办?

有人可以帮我找到方向吗?

提前致谢。

python
3个回答
3
投票

如果您正在寻找处理间隔算术的 Python 库,请考虑 python-interval。免责声明:我是该库的维护者。

import intervals as I

interval = I.empty()
for i, j in [(0, 1), (2, 4), (6, 7), (3, 5)]:
    interval = interval | I.closed(i, j)
print(interval)

结果

[0,1] | [2,5] | [6,7]

请参阅其文档了解更多信息。


1
投票

试试这个

from functools import reduce
# inp = [(0,1),(2,9),(6,7),(3,5)]
inp = [(0,1),(2,4),(6,7),(3,5)]
print(inp)
def merge(li,item):
    if li:
        if li[-1][1] >= item[0]:
            li[-1] = li[-1][0], max(li[-1][1],item[1])
            return li
    li.append(item)
    return li
print(reduce(merge, sorted(inp), []))

0
投票
t=[(0,1),(2,4),(6,7),(3,5)]
t=sorted(t, key=lambda x: x[0])
a=[]
final_list=[]
for i in t[:-1]:
    try:
        if i[1]>=t[t.index(i)+1][0]:
            if i not in a:
                a.append(i)
            a.append(t[t.index(i)+1])
            if t.index(i)==len(t)-2:
                tup = (a[0][0], a[-1][-1])
                final_list.append(tup)
        else:
            tup=(a[0][0], a[-1][-1])
            final_list.append(tup)
            tup=[]
            a=[]
    except:
        final_list.append(i)

if not a:
    tup = (t[-1][0], t[-1][1])
    final_list.append(tup)

print(final_list)
© www.soinside.com 2019 - 2024. All rights reserved.