查找列表中不存在的下一个整数的Python语法问题求助
解决“找到给定整数之后首个不在指定整数列表中的整数”问题
错误原因分析
- 生成器表达式必须遵循
(x for x in 可迭代对象 if 筛选条件)的结构,你之前的写法都缺了for x in 可迭代对象这部分——Python根本不知道x要从哪里取值,自然会报语法错误。比如next(x for x not in nanIndices)里,没有指定x的遍历范围,语法逻辑不完整。 - 你试的
next(x for x in range(1,1000) and x not in nanIndices)也不对,不能把遍历范围和筛选条件用and拼接,条件必须放在if分句里。
正确实现代码
假设你要找给定整数start_num之后的首个不在nanIndices中的整数,用下面的代码:
start_num = 5 # 替换成你实际的起始整数 next(x for x in range(start_num + 1, float('inf')) if x not in nanIndices)
range(start_num + 1, float('inf'))会生成从起始整数的下一个数开始的无限序列,直到找到符合条件的数就停止。if x not in nanIndices是核心筛选条件,确保选出的数不在目标列表里。
如果你的需求是从1开始找首个不在nanIndices中的数,只要调整range的起始值:
next(x for x in range(1, float('inf')) if x not in nanIndices)
优化建议
如果nanIndices是个很大的列表,x not in nanIndices的查找速度会很慢,建议先把列表转成集合:
nan_set = set(nanIndices) start_num = 5 next(x for x in range(start_num + 1, float('inf')) if x not in nan_set)
集合的成员查找效率远高于列表,能大幅提升代码运行速度。
内容的提问来源于stack exchange,提问作者OtagoHarbour
相关产品推荐
相关产品推荐

