在代码高尔夫中耗尽生成器的最短代码
Shortest code for depleting a generator in code golfing
鉴于您不关心实际输出,有什么方法可以耗尽发电机?
我在地图中使用的函数会自行打印,所以我所要做的就是获取地图进行评估。
目前,我使用 list()
来执行此操作,但我正在寻找更短的方法。
任意示例:
list(map(print,range(10)))
如果您知道您的生成器将不包含一位整数(例如 2
),您可以使用 2 in ...
来耗尽它,它比 [=12= 少一个字符].
Set
比list
.
少一个字符
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)),
节省四个字符(它产生 tuple
个 None
s)。
对于 3.4 及更早版本,您可以(假设存在一个单字符长文字,但不会出现在输出中)执行以下操作:
0in map(print,range(10)) # tokenizer is fine with no space between 0 and in
这节省了两个字符,同时也避免了存储任何中间 list
s.
如果输出完全不受控制,并且您低于 3.5,正如其他人指出的那样,保存单个字符很容易(例如,只需将 list
替换为 any
,如果只有 "falsy" 可能的值,all
如果只有 "truthy" 可能的值,或者 set()
所有值,但以存储 set
为代价),但以上如果您有版本或生成器输出保证,可以节省更多。
显然,如果您不需要 print
,这可以缩短更多,因为 *somegen,
将完成没有无意义的 print
的工作,只需要两个字符不仅仅是首先引用生成器。
鉴于您不关心实际输出,有什么方法可以耗尽发电机?
我在地图中使用的函数会自行打印,所以我所要做的就是获取地图进行评估。
目前,我使用 list()
来执行此操作,但我正在寻找更短的方法。
任意示例:
list(map(print,range(10)))
如果您知道您的生成器将不包含一位整数(例如 2
),您可以使用 2 in ...
来耗尽它,它比 [=12= 少一个字符].
Set
比list
.
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)),
节省四个字符(它产生 tuple
个 None
s)。
对于 3.4 及更早版本,您可以(假设存在一个单字符长文字,但不会出现在输出中)执行以下操作:
0in map(print,range(10)) # tokenizer is fine with no space between 0 and in
这节省了两个字符,同时也避免了存储任何中间 list
s.
如果输出完全不受控制,并且您低于 3.5,正如其他人指出的那样,保存单个字符很容易(例如,只需将 list
替换为 any
,如果只有 "falsy" 可能的值,all
如果只有 "truthy" 可能的值,或者 set()
所有值,但以存储 set
为代价),但以上如果您有版本或生成器输出保证,可以节省更多。
显然,如果您不需要 print
,这可以缩短更多,因为 *somegen,
将完成没有无意义的 print
的工作,只需要两个字符不仅仅是首先引用生成器。