alw*_*btc 7 python standards function list
我想知道在Python中是否有一个标准的库函数,它将重新排列列表的元素,如下所示:
a = [1,2,3,4,5,6,7]
function(a)
print a
a = [1,7,2,6,3,5,4]
Run Code Online (Sandbox Code Playgroud)
它应该从原始列表的开头获得一个元素,然后从结尾获得一个元素,然后从开始获得第二个元素,依此类推.然后重新排列列表.
问候,
你可以构建一个快速,内存效率高的生成器,使用itertools它来做你想要的:
from itertools import chain, izip
def reorder(a):
gen = chain.from_iterable(izip(a, reversed(a)))
for _ in a:
yield next(gen)
>>> list(reorder(a))
<<< [1, 7, 2, 6, 3, 5, 4]
Run Code Online (Sandbox Code Playgroud)
你会发现它itertools有很多用于创建自己的高效迭代器的构建块.一个稍微简洁的解决方案:
>>> list(chain.from_iterable(izip(a, reversed(a))))[:len(a)]
<<< [1, 7, 2, 6, 3, 5, 4]
Run Code Online (Sandbox Code Playgroud)
列表推导是构建列表的另一种非常简洁的方法:
>>> [x for t in zip(a, reversed(a)) for x in t][:len(a)]
<<< [1, 7, 2, 6, 3, 5, 4]
Run Code Online (Sandbox Code Playgroud)
最后这里是一个简短的单行内容,只是为了好玩:
>>> sum(zip(a, a[::-1]), ())[:len(a)]
<<< (1, 7, 2, 6, 3, 5, 4)
Run Code Online (Sandbox Code Playgroud)