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

使用列表推导式实现占比计算函数报错:int对象不可迭代

问题分析与解决

首先,你的代码报错'int'对象不可迭代,根源出在sum(i)这部分——i是你遍历list_1时拿到的单个整数,而sum()函数要求传入一个可迭代对象(比如列表、元组),直接传单个整数自然会报错。

另外,你的逻辑也偏离了需求:你需要的是「正数/负数/零的数量占总数量的浮点占比」,但你现在用了取模运算%,这完全不是计算占比的正确方式。

修正后的实现

我们可以用列表推导式高效统计各类数值的数量,再除以总数得到占比,代码如下:

def plusMinus(*args):
    total = len(args)
    # 统计正数、负数、零的数量
    pos_count = len([num for num in args if num > 0])
    neg_count = len([num for num in args if num < 0])
    zero_count = len([num for num in args if num == 0])
    
    # 计算浮点占比,注意处理总数为0的情况(避免除以0)
    pos_ratio = pos_count / total if total != 0 else 0.0
    neg_ratio = neg_count / total if total != 0 else 0.0
    zero_ratio = zero_count / total if total != 0 else 0.0
    
    print(f"正数占比: {pos_ratio}")
    print(f"负数占比: {neg_ratio}")
    print(f"零的占比: {zero_ratio}")

plusMinus(10, 25, 30, 0, -45, -50)

代码说明

  • 直接用len(args)获取总数量,不需要额外循环计数,更简洁;
  • 用列表推导式筛选出对应数值后取长度,快速统计各类数量;
  • 加入了total != 0的判断,避免传入空参数时出现除以0的错误;
  • 用格式化字符串清晰输出各类占比,符合浮点分数的要求。

运行这段代码后,输出结果为:

正数占比: 0.5
负数占比: 0.3333333333333333
零的占比: 0.16666666666666666

如果你想进一步优化,还可以用生成器表达式代替列表推导式(把[]换成()),这样不会生成临时列表,内存效率更高:

pos_count = sum(1 for num in args if num > 0)

这里sum(1 for ...)会对每个符合条件的元素累加1,效果和len([...])一样,但更节省内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:44