一尘不染

将整数列表分解为递增序列的列表

python

假设列表中没有连续的整数。

我已经尝试过使用NumPy(np.diff)来解决每个元素之间的差异,但是还无法使用它来获得答案。下面是输入(第一行)和预期输出(第二行)的两个示例。

[6, 0, 4, 8, 7, 6]
[[6], [0, 4, 8], [7], [6]]


[1, 4, 1, 2, 4, 3, 5, 4, 0]
[[1, 4], [1, 2, 4], [3, 5], [4], [0]]

阅读 256

收藏
2021-01-20

共1个答案

一尘不染

您可以用来itertools.zip_longest对列表中的顺序元素对启用迭代,并enumerate跟踪序列未增加的索引值,以便将相应的切片附加到输出列表中。

from itertools import zip_longest

nums = [1, 4, 1, 2, 4, 3, 5, 4, 0]

results = []
start = 0
for i, (a, b) in enumerate(zip_longest(nums, nums[1:])):
    if b is None or b <= a:
        results.append(nums[start:i+1])
        start = i + 1

print(results)
# [[1, 4], [1, 2, 4], [3, 5], [4], [0]]
2021-01-20