python - 获取范围内集合的端点

标签 python algorithm math set range

对于我的生活,我看不出如何做到这一点。我需要使用 python 收集一定范围内的多个集合的非重叠端点。

例如,用户可以输入 10 的范围和两组 23。我需要在此范围内获取这些集合的终点,以便:

set 2 groupings: 1-2,6-7
set 3 groupings: 3-5,8-10

任何单个集合的范围、集合数量和大小都是任意的。我不能落在范围之外,所以没有半套。

我一直认为应该有一个简单的公式来解决这个问题,但我想不出。

编辑

按照范围 12 和设置 1、2 和 3 的示例输入的要求,输出应为:

set 1: 1,7
set 2: 2-3,8-9
set 3: 4-6,10-12

据我所知,我正在研究某种累加器模式。像这样的伪代码:

for each miniRange in range:
    for each set in sets:
        listOfCurrSetEndpoints.append((start, end))

最佳答案

我认为对此没有很好的内置解决方案。 (如果有一个与 Haskell 的 scan 函数等效的内置函数会更容易。)但这已经足够简洁了:

>>> import itertools
>>> from collections import defaultdict
>>> partition_lengths = [1, 2, 3]
>>> range_start = 1
>>> range_end = 12
>>> endpoints = defaultdict(list)
>>> for p_len in itertools.cycle(partition_lengths):
...     end = range_start + p_len - 1
...     if end > range_end: break
...     endpoints[p_len].append((range_start, end))
...     range_start += p_len
... 
>>> endpoints
defaultdict(<type 'list'>, {1: [(1, 1), (7, 7)], 2: [(2, 3), (8, 9)], 3: [(4, 6), (10, 12)]})

您现在可以根据需要格式化 endpoints 字典以进行输出。

顺便说一句,我对你在这个问题中使用“set”感到很困惑,这就是为什么我使用“partition”来代替。

关于python - 获取范围内集合的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7600235/

相关文章:

python - Kivy代码显示ListView崩溃

python - 如何在 Python 中将制表符分隔、管道分隔转换为 CSV 文件格式

python - Python 中的马尔可夫聚类

algorithm - 创建平衡二叉搜索树的输入

math - 如何在更高维度的超球面上均匀分布点?

string - 在 Python 3 中格式化 LaTeX 数学字符串

python - 如何将 argparse 参数传递给类

python - mod_wsgi 中的 Hello World

algorithm - 将数字舍入到给定值的特定组合

c - 如何在不使用数组的情况下在 C 中找到第三大整数?