Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Slice - Fatal编程技术网

在python中,给定每个分区的起始点或结束点,将数组划分为大小不均匀的分区

在python中,给定每个分区的起始点或结束点,将数组划分为大小不均匀的分区,python,arrays,slice,Python,Arrays,Slice,如何将列表划分为较小且大小不均匀的区间,并给出每个区间的理想初始值和最终值 我有一份16383项的清单。I还有一个单独的值列表,每个间隔应在该列表中结束,并应输入以下内容 我需要使用给定的间隔,根据每个元素的值,将其分配给它所属的分区 我试过阅读一些东西,但我只遇到了这样的情况:当给出原始列表时,人们将其拆分为大小相等的分区 谢谢 布莱斯如果我理解你的意思,你需要这样的东西 >>> a = range(20) >>> a [0, 1, 2, 3, 4, 5,

如何将列表划分为较小且大小不均匀的区间,并给出每个区间的理想初始值和最终值

我有一份16383项的清单。I还有一个单独的值列表,每个间隔应在该列表中结束,并应输入以下内容

我需要使用给定的间隔,根据每个元素的值,将其分配给它所属的分区

我试过阅读一些东西,但我只遇到了这样的情况:当给出原始列表时,人们将其拆分为大小相等的分区

谢谢


布莱斯

如果我理解你的意思,你需要这样的东西

>>> a = range(20)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> i = [[1, 5], [5, 8], [8, 20]]
>>> [a[x:y] for x, y in i]
[[1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]
或者,如评论中所建议的:

>>> [a[slice(*s)] for s in i]
[[1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]

您仍然可以使用切片:

>>> c = [0,3,5,10]
>>> l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]    
>>> [l[c[i]:c[i+1]] for i in range(len(c)-1)]
[[0, 1, 2], [3, 4], [5, 6, 7, 8, 9]]
还有一个变体:

a = range(20)
b = [3, 5, 8, 17]
map(lambda x, y: a[x : y], [0] + b, b)
给出:

[[0, 1, 2], [3, 4], [5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15, 16], [17, 18, 19]]
通过列表理解

>>> a = range(20)
>>> b = [3, 5, 8, 17]
>>> [a[x : y] for x, y in zip([0] + b[:-1], b)]
说明:

[0] + b[:-1]
给予

[0, 3, 5, 8]
然后

给出了边界

[(0, 3), (3, 5), (5, 8), (8, 17)]
最后通过列表理解进行迭代以获得

[[0, 1, 2], [3, 4], [5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15, 16]]
  • 对于限制列表中的每个范围,创建一个空列表加上一个溢出值,作为一个元组,其中最大值在列表中,最小值在该列表中,最后一个将有一个最大值为无
  • 对于“值”列表中的每个值,运行元组,直到找到值为>最小值和<最大值或最大值为无的元组
  • 当您找到正确的列表时,将值附加到该列表并继续下一个列表

  • 当你说“interval”时,你是否有一个分区的运行长度,这样每个分区都紧跟在另一个分区之后,或者有一个定义分区的范围……你可以通过允许
    slice
    的功能稍微扩展这个范围,例如:
    [a[slice(*s)]代表i中的s]
    你有一个例子吗?
    [[0, 1, 2], [3, 4], [5, 6, 7], [8, 9, 10, 11, 12, 13, 14, 15, 16]]