Python重新排序已排序的列表,因此最高值位于中间

时间:2012-05-07 13:08:37

标签: python sorting partitioning

我需要重新排序已排序的列表,因此“middle”元素是最高的数字。中间的数字是递增的,中间的数字是递减的。

我有以下工作解决方案,但感觉可以更简单地完成:

foo = range(7)
bar = [n for i, n in enumerate(foo) if n % 2 == len(foo) % 2]
bar += [n for n in reversed(foo) if n not in bar]
bar
[1, 3, 5, 6, 4, 2, 0]

2 个答案:

答案 0 :(得分:9)

怎么样:

foo[len(foo)%2::2] + foo[::-2]

In [1]: foo = range(7)
In [2]: foo[len(foo)%2::2] + foo[::-2]
Out[2]: [1, 3, 5, 6, 4, 2, 0]
In [3]: foo = range(8)
In [4]: foo[len(foo)%2::2] + foo[::-2]
Out[4]: [0, 2, 4, 6, 7, 5, 3, 1]

答案 1 :(得分:1)

使用切片,步长为2,然后-2返回:

>>> foo[1::2]+foo[-1::-2]
[1, 3, 5, 6, 4, 2, 0]