在代码高尔夫中耗尽生成器的最短代码

Shortest code for depleting a generator in code golfing

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

我在地图中使用的函数会自行打印,所以我所要做的就是获取地图进行评估。

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

任意示例:

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

如果您知道您的生成器将不包含一位整数(例如 2),您可以使用 2 in ... 来耗尽它,它比 [=12= 少一个字符].

Setlist.

少一个字符
set(map(print,range(10)))

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

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

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

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

与:

*map(print,range(10)),

节省四个字符(它产生 tupleNones)。

对于 3.4 及更早版本,您可以(假设存在一个单字符长文字,但不会出现在输出中)执行以下操作:

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

这节省了两个字符,同时也避免了存储任何中间 lists.

如果输出完全不受控制,并且您低于 3.5,正如其他人指出的那样,保存单个字符很容易(例如,只需将 list 替换为 any,如果只有 "falsy" 可能的值,all 如果只有 "truthy" 可能的值,或者 set() 所有值,但以存储 set 为代价),但以上如果您有版本或生成器输出保证,可以节省更多。

显然,如果您不需要 print,这可以缩短更多,因为 *somegen, 将完成没有无意义的 print 的工作,只需要两个字符不仅仅是首先引用生成器。