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

列表推导式始终返回空列表,数字求和函数实现问题求助

问题分析

你的列表推导式b = [x for x in (a[1:]) if type(x)==int]返回空列表的核心原因:input().split()拆分输入后得到的所有元素都是字符串类型,不管输入的是数字还是字母,type(x)的结果都是str,永远不等于int,所以筛选条件永远不成立,自然得到空列表。

另外你的代码还有两个关键问题:

  • 使用eval()存在严重安全风险,若用户输入恶意代码(比如__import__('os').system('危险命令'))会触发不可控操作,应该用更安全的类型转换方式。
  • 直接对第一个元素执行eval(a[0]),遇到非数字输入会直接报错,没有异常处理逻辑。
修正后的代码
linha = input()
a = linha.split()

# 处理第一个元素:尝试转为整数,失败则输出错误提示
try:
    first_num = int(a[0])
except ValueError:
    print("Sucessor invalido")
else:
    # 筛选并转换其余元素中的有效数字:跳过非数字项
    rest_nums = []
    for item in a[1:]:
        try:
            num = int(item)
            rest_nums.append(num)
        except ValueError:
            continue  # 非数字元素直接跳过
    
    # 计算第一个数与其余数字的和,生成结果列表
    result = [num + first_num for num in rest_nums]
    print(result)
代码说明
  1. 第一个元素校验:用try-except尝试将第一个元素转为整数,若转换失败(比如输入a),直接输出Sucessor invalido。
  2. 筛选有效数字:遍历剩余元素,同样用try-except尝试转整数,成功转换的加入列表,失败的直接跳过,自动剔除非数字元素。
  3. 生成结果:通过列表推导式,将筛选后的每个数字与第一个数相加,得到最终结果并输出。
测试验证
  • 输入1 2 3 4,输出[3, 4, 5]
  • 输入1 2 b 4,输出[3, 5]
  • 输入a 1 2 3,输出Sucessor invalido

内容的提问来源于stack exchange,提问作者Inês Ribeiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:20:27