def interleave(s):
gen = (c for pair in zip(s, reversed(s)) for c in pair)
return "".join(next(gen) for _ in s)
>>> interleave("abcdef")
'afbecd'
>>> interleave("abcde")
'aebdc'
您可以引入更多UTIL来进一步缩短代码:
from itertools import chain
def interleave(s):
gen = chain.from_iterable(zip(s, reversed(s)))
return "".join(next(gen) for _ in s)
通过您的方法,您可以做到:
输出:
在我看来,这里基于字符串长度有两种可能,但它们实际上只是在处理中间字符的方式上有所不同。因此,
abcdefg
的输入应该给您agbfced
的输出,而abcdef
的输出应该是afbecd
鉴于上述情况,我认为这应该是可行的:
在没有任何虚假内存使用的情况下,您可以将一些惰性迭代器/生成器与
reversed
和zip
一起使用您可以引入更多UTIL来进一步缩短代码:
相关问题 更多 >
编程相关推荐