在生成器中迭代input()



现在我正在学习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版本?)。

最新更新