python - 在 Python 中遍历大型数组以查找缺失元素的最有效方法
问题描述
我正在尝试在线测试。测试要求编写一个函数,给出一个范围为 1 到 100000 的最多 100000 个整数的列表,它将找到第一个丢失的整数。
例如,如果列表为 [1,4,5,2],则输出应为 3。
我遍历列表如下
def find_missing(num)
for i in range(1, 100001):
if i not in num:
return i
我收到的反馈是代码在处理大列表时效率不高。我很新,我找不到答案,我怎样才能更有效地迭代?
解决方案
第一个改进是通过set
对重复成员资格测试使用 a 来使您的线性化:
def find_missing(nums)
s = set(nums)
for i in range(1, 100001):
if i not in s:
return i
鉴于 C 优化的 python 排序是如何进行的,您还可以执行以下操作:
def find_missing(nums)
s = sorted(set(nums))
return next(i for i, n in enumerate(s, 1) if i != n)
但这两者在创建新集合时都相当低效。您可以通过就地排序来避免这种情况:
from itertools import groupby
def find_missing(nums):
nums.sort() # in-place
return next(i for i, (k, _) in enumerate(groupby(nums), 1) if i != k)
推荐阅读
- python - 如何使用导数和梯度体面来找到最小化函数的 x 值
- airflow - Apache Atlas 和 Airflow 集成
- php - Json解码成php
- javascript - 用户输入功能无法正常工作?
- if-statement - 错误!条件 MS Word 365 的未知操作码
- angular - igx 网格内联功能不适用于自定义列
- docker - 从 docker-compose.yml 引用 Dockerfile?
- lua - 罗布洛克斯 || game.Players.LocalPlayer.Name 尝试调用字符串值?
- java - Java FileInputStream FileOutputStream 在运行中的区别
- python - 使用 Python 进行简单的对称加密