1 回答
TA贡献1883条经验 获得超3个赞
在你的例子中,第一个 if 永远不会被触发。但这将与此示例数据一起使用:
x = (5 ,4, 4, 2)
y = [[5, 4], [4, 2]]
更好是相当主观的。但是不使用窗口也可以达到相同的目标,只需改变值
def func2(x):
x = iter(x)
try:
prev_value = next(x)
focal_value = next(x)
except StopIteration:
return [list(x)]
sub_result = [prev_value]
result = [sub_result]
for next_value in x:
if prev_value >= focal_value == next_value:
sub_result.append(focal_value)
sub_result = []
result.append(sub_result)
elif prev_value > focal_value < next_value:
sub_result = [focal_value]
result.append(sub_result)
else:
sub_result.append(focal_value)
prev_value, focal_value = focal_value, next_value
sub_result.append(focal_value)
return result
timeit 说它快两倍以上
一旦你持有循环中的最后一个值,你就必须在循环之后为它添加特殊处理。但是我的代码显示可以将sub_result列表附加到循环中。
添加回答
举报