Python如何编写生成器/迭代器表达式获取列表最大元素的升序索引序列
实现逻辑说明
- 第一步:先获取整数列表X的最大元素值,可直接调用内置函数
max(X)计算,示例中X的最大值为10。 - 第二步:调用
enumerate(X)遍历列表,该函数会按列表从左到右的顺序,依次返回(当前索引, 当前元素值)的元组,遍历过程中拿到的索引天然符合升序要求,不需要额外排序。 - 第三步:筛选出所有元素值等于最大值的元组,仅保留对应索引,即可得到符合要求的序列。
你之前的错误实现没有做最大值筛选,反而对枚举结果做了倒序排序,既没有过滤无效元素,也打乱了索引的升序顺序,所以无法得到正确结果。
正确实现代码
直接用生成器表达式替换示例中的YOUR_EXPRESSION即可,完整可运行代码如下:
from typing import Iterator X = [1,10,3,4,10,5] S : Iterator[int] = (idx for idx, val in enumerate(X) if val == max(X)) assert list(S)==[1,4]
如果X的规模很大,为了避免每次判断都重复计算最大值,可以提前把最大值存到变量里优化性能:
from typing import Iterator X = [1,10,3,4,10,5] max_val = max(X) S : Iterator[int] = (idx for idx, val in enumerate(X) if val == max_val) assert list(S)==[1,4]
内容的提问来源于stack exchange,提问作者Emilia Delizia
相关产品推荐
相关产品推荐

