python 根据条件功能查找元素索引

Mas*_*ran 0 python lambda functional-programming list-comprehension

假设我有一个以下形式的列表:

mylist = [5, 8, 40, 90, 3, 100, 79, 10, 10]

我想找到列表中最大值的 80% 以内的元素索引。我可以用几个循环来完成它,但我想了解是否有更实用的方法来完成它。这是我用过的:

max_nr = max(mylist)
all_max = list(filter(lambda y : y > max_nr*0.8, mylist))
Run Code Online (Sandbox Code Playgroud)

是否有下一步(或单个步骤)与mapfilter可以说:遍历列表,并仅保留那些遵守大于数字的约束的元素的索引。

我正在寻找应用第三步的替代方法:

    all_max_index = [mylist.index(i) for i in all_max]
Run Code Online (Sandbox Code Playgroud)

ovg*_*vin 5

您可以使用enumerate然后解压索引以及列表理解中的数字来获取索引。

>>> indices = [i for i, num in enumerate(mylist) if num > max_nr * 0.8]
>>> indices
[3, 5]
Run Code Online (Sandbox Code Playgroud)