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

2024-06-02 06:00:02 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将一个列表划分为较小的、大小不均匀的区间,并给出每个区间的理想初始值和最终值?你知道吗

我有16383件物品的清单。I还有一个单独的值列表,其中列出了每个间隔应结束的值以及以下应输入的值。你知道吗

我需要使用给定的间隔来将每个元素分配给它所属的分区,具体取决于它的值。你知道吗

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

谢谢

布莱斯


Tags: 元素列表间隔情况分区理想区间件物品
3条回答

您仍然可以使用切片:

>>> 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)
>>> 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]]

或者,正如Jon Clements在评论中建议的那样:

>>> [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]]

还有一个变种:

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]]

相关问题 更多 >