gpt4 book ai didi

Python - 在具有不同条件的列表中查找下一个和上一个值

转载 作者:行者123 更新时间:2023-11-28 22:48:13 24 4
gpt4 key购买 nike

我正在寻找一种方法来遍历 Python 中的数字列表以找到特定元素的索引,然后找到最接近它的满足特定条件的元素。我似乎无法找到任何内置函数来保留我在列表中的位置,以便我可以找到具有不同搜索条件的上一个和下一个项目。 Python 中是否存在类似的东西?

我有一长串数字,我试图在其中找到特定的重复模式。

例如:

L = [1, 1, 3, 5, 7, 5, 1, 2, 1, 1, 1, 8, 9, 1, 1, 1]

假设我想通过查找列表中第一个数字的索引 >4,然后查找两边最近的数字 <2 的索引来找到峰值。然后我想找到下一个峰并做同样的事情。 (实际模式比这更复杂。)

因此,我在此示例中寻找的最终输出是 1:6、10:13。

我正在使用它来查找第一个值:

a = next(i for i, v in enumerate(L) if v > 4)

或者找到所有值 > 4 以稍后将它们分组:

indexes = [i for i, v in enumerate(L) if v > 4]

我尝试了 next、iter、生成器、多种 for 循环等等,但都没有成功。我也查看过 islice,但是将找到的每个索引的列表一分为二,然后对这两部分进行正向和反向搜索似乎有些矫枉过正。一定有更简单的方法吗?

如有任何帮助,我们将不胜感激。

最佳答案

我会使用生成器函数并在您迭代输入时跟踪与您的条件匹配的索引:

L = [1, 1, 3, 5, 7, 5, 1, 2, 1, 1, 1, 8, 9, 1, 1, 1]

def peak_groups(l):
start_i = 0
peak_i = None
for i,x in enumerate(l):
if peak_i is None:
# look for start of peak group, or peak itself
if x < 2:
start_i = i
elif x > 6:
peak_i = i
else:
# look for end of peak group
if x < 2:
yield (start_i, peak_i, i)
start_i = i
peak_i = None

# finally check edge condition if we reached the end of the list
if peak_i is not None:
yield (start_i, peak_i, i)

for group in peak_groups(L):
print group

结果:

(1, 4, 6)
(10, 11, 13)

好处是您只需对输入进行一次迭代。尽管在您的现实世界分组条件下这可能不是那么简单。

你将不得不考虑如果多个“峰组”重叠会发生什么,目前这还没有找到组中的最大峰,但它应该是一个起点。

关于Python - 在具有不同条件的列表中查找下一个和上一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25395480/

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