列表推导式始终返回空列表,数字求和函数实现问题求助
问题分析
你的列表推导式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)
代码说明
- 第一个元素校验:用
try-except尝试将第一个元素转为整数,若转换失败(比如输入a),直接输出Sucessor invalido。 - 筛选有效数字:遍历剩余元素,同样用
try-except尝试转整数,成功转换的加入列表,失败的直接跳过,自动剔除非数字元素。 - 生成结果:通过列表推导式,将筛选后的每个数字与第一个数相加,得到最终结果并输出。
测试验证
- 输入
1 2 3 4,输出[3, 4, 5] - 输入
1 2 b 4,输出[3, 5] - 输入
a 1 2 3,输出Sucessor invalido
内容的提问来源于stack exchange,提问作者Inês Ribeiro
相关产品推荐
相关产品推荐

