Python中如何简洁查询字符串在列表中的索引 消除实现冗余
Python列表元素索引查询的简洁高效实现
你提到的两次查询的冗余问题确实存在:in成员判断和index方法都会独立遍历列表,最坏情况下会执行两次完整扫描,完全可以优化掉重复开销。
以下是两种更简洁高效的实现方案,均为单次遍历逻辑:
- 方案1:
try-except捕获异常(推荐绝大多数场景使用)
def find_file_ix(fn, fn_list): try: return fn_list.index(fn) except ValueError: return -1
该方案仅在index找不到目标元素时才会抛出ValueError,全程仅对列表做1次遍历,没有冗余查询,代码量极少。当查询元素大概率存在于列表中时,该方案性能最优。
- 方案2:
next+enumerate生成器写法(无异常逻辑)
def find_file_ix(fn, fn_list): return next((i for i, val in enumerate(fn_list) if val == fn), -1)
该方案通过enumerate同时遍历索引和元素值,生成器匹配到第一个符合条件的元素就立即返回,匹配失败时直接返回默认值-1,全程也是单次遍历,不需要处理异常逻辑。如果查询元素大概率不存在,该方案性能更稳定,没有异常捕获的额外开销。
内容的提问来源于stack exchange,提问作者Bill Cairns
相关产品推荐
相关产品推荐

