You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用一行min()代码获取一个数组中不存在于另一个数组的最小值

问题描述

现有如下两组数组:

nearest_distance_table = [1,4,5,9,10,14,15]
nodes_explored = [2,10,14]

需要将变量next赋值为nearest_distance_table中不存在于nodes_explored的最小值,我已通过如下for循环实现对应逻辑:

minimum = float("inf")
for I in nearest_distance_table: 
    if I < minimum and I not in nodes_explored: 
        minimum = I
print(I)

请问是否可以借助min()函数用一行代码实现该需求?


解答

完全可以实现,具体写法如下:

next = min(num for num in nearest_distance_table if num not in nodes_explored)

小提示:next是Python内置函数名,实际开发中不建议用它作为变量名,避免命名冲突。

效率优化建议

如果nodes_explored数据量较大,建议先转换为集合再做存在性判断:集合的in操作时间复杂度为O(1),远高于列表的O(n),数据量越大优化效果越明显。
可以单独声明集合变量,也可以直接内联到一行代码中:

# 单独声明集合
explored_set = set(nodes_explored)
next = min(num for num in nearest_distance_table if num not in explored_set)

# 内联写法,整行完成赋值
next = min(num for num in nearest_distance_table if num not in set(nodes_explored))

边界情况兼容

如果存在nearest_distance_table所有元素都属于nodes_explored的场景,Python 3.4及以上版本可以给min()添加default参数自定义无符合条件时的返回值,避免抛出ValueError异常:

# 无符合条件元素时返回None
next = min((num for num in nearest_distance_table if num not in nodes_explored), default=None)

原有代码问题提示

你原来写的for循环存在逻辑bug:循环结束后打印的是遍历的最后一个元素I,而非存储最小值的minimum,运行你给出的示例数组会输出15而非正确的最小值1,需要注意修正。


内容的提问来源于stack exchange,提问作者Patrick_Chong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:36:04