Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何制作分区结构_Python_Algorithm_Numpy - Fatal编程技术网

Python 如何制作分区结构

Python 如何制作分区结构,python,algorithm,numpy,Python,Algorithm,Numpy,让我们从存储在列表中的段[0,10]开始 [ [0, 10] ] 我收到了一套射程 [1,6] [5, 8] 将段划分到列表中 [ [0,1], [1,5], [5,6], [6, 8], [8, 10] ] 在python中,什么样的数据结构/方法可以很好地做到这一点 我不知道这类任务的术语,所以我的谷歌搜索没有结果 我总是可以用numpy.searchsorted暴力,但这不会是干净的。 尤其是每个子段实际上是一个具有许多属性的对象。 而且,我有几轮 creating sub-s

让我们从存储在列表中的段[0,10]开始

[ [0, 10] ]
我收到了一套射程

[1,6]   
[5, 8]
将段划分到列表中

[ [0,1], [1,5], [5,6], [6, 8], [8, 10] ]
在python中,什么样的数据结构/方法可以很好地做到这一点

我不知道这类任务的术语,所以我的谷歌搜索没有结果

我总是可以用
numpy.searchsorted
暴力,但这不会是干净的。
尤其是每个子段实际上是一个具有许多属性的对象。
而且,我有几轮

creating sub-segment object / receiving ranges for further partitioning

在我看来,这就像是一个排序问题。将初始范围插入数组,然后再插入所有其他值。对数组进行排序,然后将其成对拆分,这将为您提供子范围。您还可以使用第一个范围设置最小/最大值进行验证

我不确定您希望如何查询数据结构,或者每个段都有哪些“属性”,但给出您的示例,一个排序集数据结构就足够了。如果我们将您的列表展平,则我们有:

initial = [0, 10]
...
final = [0, 1, 5, 6, 8, 10]
我们可以通过以下方式将final转化为您的细分市场:

segments = [final[pos:pos+1] for pos in xrange(len(final) - 1)]
因此,对于每一个附加部分,我们将其与以下内容结合起来:

next_iter = sorted(set(prev_iter + segment))
对于大型列表来说,这将变得昂贵,但有一些数据类型可以提供帮助。排序集容器按排序顺序将其元素作为一个集合进行维护。模块提供的数据类型正好用于此目的:

from sortedcontainers import SortedSet

segments = SortedSet([0, 10])

def add_segment(start, end):
    segments.add(start)
    segments.add(end)

add_segment(1, 6)
add_segment(5, 8)

print segments
# SortedSet([0, 1, 5, 6, 8, 10])
SortedSet支持快速索引和对分,因此您可以像这样进行查询:

print segments[2]
# 5

pos = segments.bisect(7)
print [segments[pos - 1], segments[pos]]
# [6, 8]

你可能有一个输入错误,在[5,6]之后你有[5,8]而不是[6,8]@Kicsi谢谢,修正了。