python - 列表中大于 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方法是什么?
解决方案
您可以使用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_larger
,True
对于这些组,我们用 来获取它们的长度sum(1 for _ in group)
。
推荐阅读
- javascript - 检测谷歌recaptcha执行的错误
- python - 仅当 item 是文本时才连接列表项
- ios - Flutter 使用 themeData Brightness 设置苹果状态栏颜色
- firebase - SSR 水合 Vue js Nuxt
- laravel - Laravel Redis 队列和主管工作者 - 作业多次执行
- python - 将位于包含模块的文件夹之外的 Excel 文件读入 Pandas DataFrame
- angular - 如何等待 NGXS 操作完成?
- postgresql - Postgresql 12:重叠运算符的性能问题并在同一张表上加入
- reactjs - 反应本机应用程序中的自动刷新令牌
- android - 如何显示从 mysqldatabase 获取的图像到 imageview