<pre><code>nums = [1, 2, 3, 4]
newarray = sum(zip(reversed(nums), nums), ())[:len(nums)]
>>> print(newarray)
(4, 1, 3, 2)
</code></pre>
<hr/>
<p>它的作用,一步一步。首先,<a href="http://docs.python.org/2/library/functions.html#reversed" rel="nofollow">reversed()</a>:</p>
^{pr2}$
<p>那么<a href="http://docs.python.org/2/library/functions.html#zip" rel="nofollow">zip()</a>:</p>
<pre><code>>>> list(zip([4, 3, 2, 1], [1, 2, 3, 4]))
[(4, 1), (3, 2), (2, 3), (1, 4)]
</code></pre>
<p>你可以看到我们几乎得到了我们想要的列表,我们有一个问题:这些是元组。我们要把它们弄平。在</p>
<pre><code>>>> (4, 1) + (3, 2) + (2, 3) + (1, 4)
(4, 1, 3, 2, 2, 3, 1, 4)
</code></pre>
<p>哦。太好了。但如何在列表中做到这一点呢?简单:使用<a href="http://docs.python.org/2/library/functions.html#sum" rel="nofollow">^{<cd1>}</a>,这正是这样做的-将许多事情添加到一起。我们只需要给它一个空的元组<code>()</code>:</p>
<pre><code>>>> sum([(4, 1), (3, 2), (2, 3), (1, 4)], ())
(4, 1, 3, 2, 2, 3, 1, 4)
</code></pre>
<p>但是我们不想要下半场,所以我们把它去掉。我们知道他的名单太长了一倍,是吗?在</p>
<pre><code>>>> (4, 1, 3, 2, 2, 3, 1, 4)[:len(nums)]
(4, 1, 3, 2)
</code></pre>
<p>就这样。在</p>
<hr/>
<p>另一个选择:</p>
<pre><code>from itertools import chain, islice
a = list(islice(chain.from_iterable(zip(nums, reversed(nums))), len(nums)))
</code></pre>