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

Python中如何合并两个调用input()的列表推导式为单个表达式

问题描述

我目前正在修读Python课程,课程任务中的数据均通过input()方法获取,而非像Codewars平台那样以函数参数形式传入。
编写生成器相关逻辑时,我需要使用无法直接迭代的input(),目前写出的代码如下:

dots = [input() for x in range(int(input()))]
parsedDots = [dot for dot in dots if not '0' in dot]

上述代码的作用是生成仅保留不含0坐标输入项的列表。
请问是否可以将这两个列表推导式合并为一个?

输入数据示例:

4
0 -1
1 2
0 9
-9 -5
解答

完全可以合并,不需要单独存储全量输入的中间列表,单条列表推导式就能实现相同逻辑:

parsedDots = [dot for _ in range(int(input())) if '0' not in (dot := input())]

说明:

  • 循环变量用_是Python的通用约定,代表该变量仅用于控制循环次数,后续不会实际使用
  • 海象运算符:=(Python 3.8及以上版本支持)会在执行过滤判断前先调用input()拿到当前输入行,赋值给dot的同时判断该行是否包含'0',只有不含0的输入行会被加入最终结果列表
  • 用给出的示例输入运行这段代码,得到的结果和原两段代码完全一致,为['1 2', '-9 -5']

如果运行环境低于Python 3.8不支持海象运算符,也可以用生成器表达式嵌套的写法实现,逻辑完全等价:

parsedDots = [dot for dot in (input() for _ in range(int(input()))) if '0' not in dot]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:09:23