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
相关产品推荐
相关产品推荐

