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

使用max函数替换Python列表中NaN值的实现方法

问题原因

你代码跑不对,核心踩了两个坑:

  • 调用max的参数形式错了:你写的max(i)是把zip生成的二元元组(比如第一个元素是(NaN, -9))当成单个可迭代对象传进去了。Python内置的max处理可迭代对象时,会先拿第一个元素当临时最大值,后面的元素只有比这个临时值大的时候才会替换。但NaN的特性就是和任何数比大小都返回False,所以只要NaN排在元组第一位,就会一直被当成最大值留到最后。
  • 题目给的已知条件max(NaN, -9) = -9,是**传两个独立参数调用max**时的规则,你把两个值打包成一个元组传,根本触发不了这个给定行为。
正确写法

你构造ll的思路其实完全没问题:非NaN的位置和原列表值一模一样,NaN的位置填-9。这样两个数配对后,要么是(NaN, -9)按题目规则返回-9,要么是(x, x)——两个一样的数比大小,不管怎么比都会返回x本身,哪怕x是-12这种比-9小的数,也不会被错误替换。
你只需要把列表推导式里的max(i)改成max(*i),用拆包运算符把元组里的两个值拆成独立参数传给max就行:

from numpy import NaN

l = [NaN, 5, -12, NaN, 9, 0]
ll = [-9, 5, -12, -9, 9, 0]

print([max(*i) for i in zip(l, ll)])
# 输出:[-9, 5, -12, -9, 9, 0]

要是不想手动提前写ll列表,也可以利用NaN不等于自身的特性,遍历的时候直接生成配对值,逻辑和上面完全一致:

print([max(x, -9 if x != x else x) for x in l])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:54:29