gpt4 book ai didi

python - 在循环列表中查找上一个匹配元素

转载 作者:太空宇宙 更新时间:2023-11-03 14:20:39 24 4
gpt4 key购买 nike

我有一个 TrueFalse 的列表,它被认为是循环的(第一个元素在最后一个元素之后)。在具有给定索引的元素之前找到最近的 True 元素的索引的更好方法是什么?

这是我的解决方案。它非常简单,但不是很 pythonic,正如我认为的那样:

def prev_element(a, i):
i -= 1
while not a[i]:
i -= 1
return i % len(a)

如果没有这样的元素,这将引发 IndexError,这对我来说没问题。我利用了一个列表可能被负索引索引的事实,这使得列表循环。有更好的解决方案吗?也许是一些很酷的单行?

最佳答案

from itertools import  count

def prev_element(a, i):
cyc = count(i - 1, -1)
res = next((next(cyc) + 1 for _ in range(len(a)) if a[next(cyc)]), None)
return res % len(a) if res else res

您可以将 max 与 try/except 一起使用,使用 lambda 来获取最大值,在它不能小于我们正在搜索的索引的约束下,如果我们下面没有索引,它将获取上面的索引。

def prev_element(a, ind):
try:
return max((i for i, ele in enumerate(a) if ele and i != ind), key=lambda x: (x < ind, x))
except ValueError:
return None

不用 try/except 使用列表:

def prev_element(a, ind):
inds = [i for i, ele in enumerate(a) if ele and i != ind]
return max(inds,key=lambda x: (x < ind, x)) if inds else None

关于python - 在循环列表中查找上一个匹配元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28441404/

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