gpt4 book ai didi

python - 扫描列表中大于 x 的 5 个连续值

转载 作者:太空狗 更新时间:2023-10-29 21:42:52 26 4
gpt4 key购买 nike

我想扫描一个大列表以查找大于 x 的连续值。本例 x 大于 1.0。

例如,

my_list = [0.2, 0.1, 0.3, 1.1, 0.7, 0.5, 1.2, 1.3, 1.4, 1.2, 1.9, 1.1, 0.2, 1.3, 1.5, 1.4, 1.2, 1.1, 0.2, 1.3, 0.1., 1.6, 0.2, 0.5, 1.0, 1.1, 0.2]

我可以通过以下方式对这个列表进行子集化

for i in range(0, len(my_list)):
subset = my_list[i:i+5]

所以我明白了

[0.2, 0.1, 0.3, 1.1, 0.7]
[0.1, 0.3, 1.1, 0.7, 0.5]
[0.3, 1.1, 0.7, 0.5, 1.2]
[1.1, 0.7, 0.5, 1.2, 1.3]
[0.7, 0.5, 1.2, 1.3, 1.4]
[0.5, 1.2, 1.3, 1.4, 1.2]
[1.2, 1.3, 1.4, 1.2, 1.9] <-- values I want
[1.3, 1.4, 1.2, 1.9, 1.1] <-- values I want
[1.4, 1.2, 1.9, 1.1, 0.2]
[1.2, 1.9, 1.1, 0.2, 1.3]
[1.9, 1.1, 0.2, 1.3, 1.5]
[1.1, 0.2, 1.3, 1.5, 1.4]
[0.2, 1.3, 1.5, 1.4, 1.2]
[1.3, 1.5, 1.4, 1.2, 1.1] <-- values I want

执行此操作的最佳方法是什么?

最佳答案

这是一个基于 itertools 的方法,它不需要任何额外的内存并将结果作为生成器返回:

from itertools import tee, islice

def find_consecutive(the_list, threshold, count=5):
my_iters = tee(the_list, count)
for i, it in enumerate(my_iters):
next(islice(it, i, i), None)
return (f for f in zip(*my_iters) if all(x > threshold for x in f))

my_list = [0.2, 0.1, 0.3, 1.1, 0.7, 0.5, 1.2, 1.3, 1.4, 1.2, 1.9, 1.1, 0.2, 1.3, 1.5, 1.4, 1.2, 1.1, 0.2, 1.3, 0.1, 1.6, 0.2, 0.5, 1.0, 1.1, 0.2]
list(find_consecutive(my_list, 1.0))
# [(1.2, 1.3, 1.4, 1.2, 1.9),
# (1.3, 1.4, 1.2, 1.9, 1.1),
# (1.3, 1.5, 1.4, 1.2, 1.1)]

该函数由阈值和计数参数化,因此您可以查找任意 N 个连续值。您甚至可以通过为此传递一个函数而不只是一个阈值来分解条件。

关于python - 扫描列表中大于 x 的 5 个连续值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29855458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com