首页 > 解决方案 > 列表中大于 x 的数字序列的长度

问题描述

我需要检索序列的长度,这些数字都大于任意选择的值x(某种“严重性”)。

例如,一个序列可以是:

list = [4, 3, 4, 5, 2, 5, 6, 5, 5, 6, 7, 6 ]

在这种情况下,场景可能是:

x=6
[1, 3] # since there are only two sequences with values greater than 6 (the 6 alone, and the triplet 6,7,6]

问题类似于:Python:确定 list 中相等项序列的长度,它仅适用于等号序列。

出于这个原因,在我的“草稿”中,我从列表的最大数量(在前面的场景中x=7)开始,然后用较低的替换它并找到这些序列的长度(用 6 替换所有 7 并运行相同的算法找到至少 6 个序列的长度)。

没有普通循环的pythonic方法是什么?

标签: pythonalgorithmdata-structures

解决方案


您可以使用itertools.groupby

from itertools import groupby

data = [4, 3, 4, 5, 2, 5, 6, 5, 5, 6, 7, 6 ]
x = 6

out = [sum(1 for _ in group) for is_larger, group in groupby(data, lambda value: value>=x) if is_larger]
print(out)
#[1, 3]

groupby根据条件对值进行分组value >= x,这成为键is_larger

我们只保留 所在的组is_largerTrue对于这些组,我们用 来获取它们的长度sum(1 for _ in group)


推荐阅读