【发布时间】:2017-02-14 22:06:44
【问题描述】:
我有一个包含混合序列的列表,例如
[1,2,3,4,5,2,3,4,1,2]
我想知道如何使用 itertools 将列表拆分为递增序列,在递减点处切割列表。例如上面会输出
[[1, 2, 3, 4, 5], [2, 3, 4], [1, 2]]
这是通过注意到序列在 2 处减少,所以我们在那里切割第一个位,另一个减少是在那里再次切割。
另一个例子是序列
[3,2,1]
输出应该是
[[3], [2], [1]]
如果给定的序列正在增加,我们将返回相同的序列。例如
[1,2,3]
返回相同的结果。即
[[1, 2, 3]]
对于像
这样的重复列表[ 1, 2,2,2, 1, 2, 3, 3, 1,1,1, 2, 3, 4, 1, 2, 3, 4, 5, 6]
输出应该是
[[1, 2, 2, 2], [1, 2, 3, 3], [1, 1, 1, 2, 3, 4], [1, 2, 3, 4, 5, 6]]
我所做的是定义以下函数
def splitter (L):
result = []
tmp = 0
initialPoint=0
for i in range(len(L)):
if (L[i] < tmp):
tmpp = L[initialPoint:i]
result.append(tmpp)
initialPoint=i
tmp = L[i]
result.append(L[initialPoint:])
return result
该功能 100% 工作,但我需要对 itertools 做同样的事情,这样我就可以提高代码的效率。有没有办法使用 itertools 包来避免显式循环?
【问题讨论】:
-
这是您认为可以改进的工作代码,请考虑Code Review。
-
是的。代码正在运行。我在想也许 itertools 包可以帮助改进它