用于重新排列列表的Python标准库函数

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)

它应该从原始列表的开头获得一个元素,然后从结尾获得一个元素,然后从开始获得第二个元素,依此类推.然后重新排列列表.

问候,

zee*_*kay 9

你可以构建一个快速,内存效率高的生成器,使用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)