如何高效获取10000个随机数列表中5-500区间元素及其对应索引
问题原因与解决方案
原有代码低效/出错的原因
list.index(x)每次调用都会从头遍历整个列表查找目标元素,10000长度的列表会将时间复杂度拉高到O(n²),运行耗时自然极长- 如果列表中存在重复元素,
index只会返回第一个匹配元素的索引,不仅会得到错误的索引结果,也会导致最终索引数量和元素数量不匹配
正确高效的实现方式
使用enumerate()在单次遍历中同时获取索引和对应元素,仅需O(n)时间复杂度即可完成筛选,且能保证索引和元素的数量完全对应:
# 单次遍历同时存储符合条件的索引和元素,效率最高 element_index = [] elements = [] for idx, val in enumerate(list_10000): if 5 <= val <= 500: element_index.append(idx) elements.append(val)
如果偏好列表推导式的写法,也可以分开生成:
element_index = [idx for idx, val in enumerate(list_10000) if 5 <= val <= 500] elements = [val for idx, val in enumerate(list_10000) if 5 <= val <= 500]
内容的提问来源于stack exchange,提问作者unicorn
相关产品推荐
相关产品推荐

