现在我正在学习python课程,但是那里的任务中的数据是作为输入形成的,而不是作为函数的参数,例如在codewars中。
要编写生成器,我必须使用input,它不能迭代。结果是这段代码:
dots = [input() for x in range(int(input()))]
parsedDots = [dot for dot in dots if not '0' in dot]
(这段代码应该创建一个列表,其中只有输入()不包含零坐标)
有可能把这两个发电机合二为一吗?
输入数据示例:
4
0 -1
1 2
0 9
-9 -5
您可以使用海象操作符,即3.8+中的:=
来组合它们:
parsedDots = [inp for _ in range(int(input())) if '0' not in (inp := input())]
在3.8之前,你能做的最好的事情是将你的原始列表推导(渴望,实现一个list
)转换为一个生成器表达式(懒惰),所以你不做一个实际的list
,直到你过滤掉垃圾:
dots = (input() for _ in range(int(input()))) # Parens instead of square brackets makes genexpr
parsedDots = [dot for dot in dots if '0' not in dot]
与海象解决方案相比,的开销略高于,但是每个条目的峰值内存使用量没有明显的增加,并且自引入生成器表达式以来,它适用于每个版本的Python(2.4版本?)。