Python如何从args可变参数筛选非负值且排除字符串类型元素?
问题原因
- 未过滤字符串类型元素:原有逻辑直接对所有入参执行
int(p)做数值判断,格式为数字的字符串(比如"4")可以成功转换为int通过校验,导致被错误保留 - 误用
filter(None, ans)处理结果:该操作会自动过滤所有布尔值为假的元素,0、False本身布尔值为假,因此被错误移除
修复后代码
def filter_positives_from_args(*args) -> list: return [p for p in args if not isinstance(p, str) and int(p) >= 0]
逻辑说明
- 新增
not isinstance(p, str)判断:直接排除所有字符串类型的入参,不管内容是否为数字,满足题目要求 - 保留
int(p) >= 0的数值判断:bool类型的False转int为0、True转int为1,符合非负筛选规则 - 移除错误的
filter操作:直接返回列表推导式的结果即可,不会额外过滤0、False这类符合要求的元素
内容的提问来源于stack exchange,提问作者PTP_XX
相关产品推荐
相关产品推荐

