0

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

我有一个 16383 项的列表。我还有一个单独的值列表,每个间隔应在该值处结束,并且应输入以下值。

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

我试过阅读东西,但我只遇到了给定原始列表时的情况,人们将它分成大小均匀的分区......

谢谢

布莱斯

4

5 回答 5

2

If I understand you, you need something like that

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

or, as Jon Clements suggested in comments:

>>> [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]]
于 2013-07-29T13:35:51.883 回答
0

You can still use slices:

>>> 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]]
于 2013-07-29T13:35:54.330 回答
0
  1. 对于限制列表中的每个范围,创建一个空列表加上一个溢出值作为一个元组,列表中的最大值和该列表的最小值,最后一个将在 None 上有一个最大值
  2. 对于值列表中的每个值,遍历您的元组,直到找到您的值 > min 且 < max 或最大值为 None 的值。
  3. 当您找到正确的列表时,将值附加到它并继续下一个。
于 2013-07-30T05:15:01.443 回答
0

通过列表理解,

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

然后

zip([0] + b[:-1], b)

给出边界

[(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]]
于 2013-07-29T19:16:52.360 回答
0

还有一种变体:

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]]
于 2013-07-29T17:28:27.830 回答