在代码高尔夫中耗尽发电机的最短代码

时间:2015-12-28 13:53:57

标签: python generator

鉴于您不关心实际输出,有什么方法可以耗尽发电机?

我在地图中使用的功能将自行打印,因此我所要做的就是让地图进行评估。

目前,我使用list()来执行此操作,但我正在寻找更短的方式。

任意例子:

list(map(print,range(10)))

3 个答案:

答案 0 :(得分:3)

Set是一个比list短的字符。

set(map(print,range(10)))

在某些情况下,列表理解可能会更好:

[print(a)for a in range(10)]    

答案 1 :(得分:3)

在3.5中,您可以滥用additional unpacking generalizations并替换:

list(map(print,range(10)))

使用:

*map(print,range(10)),

保存四个字符(它产生tupleNone s。。

使用3.4及更早版本,您可以(假设存在一个不存在于输出中的一个字符长的文字):

0in map(print,range(10))  # tokenizer is fine with no space between 0 and in

可以保存两个字符,同时还可以避免存储任何中间list

如果输出完全没有控制,并且你低于3.5,正如其他人所指出的那样,保存单个字符很容易(例如,只需将list替换为any,如果只是“虚假的“值可能,all如果只有”truthy“值可能,或者set()代表所有值,代价是存储set),但如果你这样可以节省更多有版本或发电机输出保证。

显然,如果你不需要print,这可以缩短甚至更多,因为*somegen,将完成工作而没有毫无意义的print,只需要两个字符以上首先引用发电机。

答案 2 :(得分:1)

如果您知道您的生成器不会包含其中一个单位数整数(例如2),则可以使用2 in ...消耗它,该{1}}小于list(...)