输入:
intersperse(666, ["once", "upon", "a", 90, None, "time"])
Run Code Online (Sandbox Code Playgroud)
输出:
["once", 666, "upon", 666, "a", 666, 90, 666, None, 666, "time"]
Run Code Online (Sandbox Code Playgroud)
什么是最优雅的(阅读:Pythonic)写作方式intersperse?
Jef*_*ado 30
我自己会写一个发电机,但是这样:
def joinit(iterable, delimiter):
it = iter(iterable)
yield next(it)
for x in it:
yield delimiter
yield x
Run Code Online (Sandbox Code Playgroud)
Fel*_*ing 17
itertools拯救
- 或 -
你可以在一行中使用多少次itertools功能?
from itertools import chain, izip, repeat, islice
def intersperse(delimiter, seq):
return islice(chain.from_iterable(izip(repeat(delimiter), seq)), 1, None)
Run Code Online (Sandbox Code Playgroud)
用法:
>>> list(intersperse(666, ["once", "upon", "a", 90, None, "time"])
["once", 666, "upon", 666, "a", 666, 90, 666, None, 666, "time"]
Run Code Online (Sandbox Code Playgroud)
Sve*_*ach 13
另一个适用于序列的选项:
def intersperse(seq, value):
res = [value] * (2 * len(seq) - 1)
res[::2] = seq
return res
Run Code Online (Sandbox Code Playgroud)
解决方案很简单,使用more_itertools.intersperse:
>>> from more_itertools import intersperse
>>> list(intersperse(666, ["once", "upon", "a", 90, None, "time"]))
['once', 666, 'upon', 666, 'a', 666, 90, 666, None, 666, 'time']
Run Code Online (Sandbox Code Playgroud)
从技术上讲,这个答案不是“写作” intersperse,它只是从另一个库中使用它。但这可能会使其他人不必重新发明轮子。