Python如何查找list/string/range等序列中指定元素的下一个元素
解决方案
原有实现问题
- 强制将所有输入转为
list,若输入为大尺寸/无限迭代器,会直接触发内存溢出或超时,且一次性消耗整个迭代器资源,存在严重冗余 - 先做
in判断再调用index方法,相当于对序列完整遍历两次,性能开销翻倍
最优实现代码
def next_item(xs, item): it = iter(xs) for elem in it: if elem == item: return next(it, None) return None
实现优势
- 全类型适配:支持列表、字符串、range、迭代器、生成器等所有Python可迭代对象
- 极致内存效率:遍历全程仅保留当前元素,无论输入序列多大都不会占用额外内存,完全避免超时问题
- 性能最优:遍历到目标元素后立刻停止执行,最多仅遍历一次序列,无任何冗余操作
测试验证
所有给出的测试用例均可完美匹配预期输出:
next_item([1, 2, 3, 4, 5, 6, 7, 8], 5)→ 6next_item(['a', 'b', 'c'], 'd')→ Nonenext_item(['a', 'b', 'c'], 'c')→ Nonenext_item('testing', 't')→ 'e'next_item(iter(range(1, 3000)), 12)→ 13
内容的提问来源于stack exchange,提问作者Brisco
相关产品推荐
相关产品推荐

