2012-05-07 5 views
3

「中」の要素が最も高い番号になるように並べ替えられたリストを並べ替える必要があります。中央までの数字はインクリメンタルです。中央の数字は降順になります。Pythonは並べ替えられたリストを並べ替え、最も高い値が中間にあるようにします

私は、次の作業のソリューションを持っているが、それは単純に行うことができるという感覚を持っている:

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] 
+0

このユースケースはどのようなケースですか? – Daenyth

+0

リストは水平に表示されます(数字は含まれません)。視覚的には、「最高」の数字を中と下に外側に配置するのが理にかなっています... – jaap3

答えて

6

程度:

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] 
+0

これはかなりクールで、私の使用例では完全に機能します。私はいつも拡張スライスシンタックスについて忘れています – jaap3

1

使用は上がり2のステップでスライスし、そして-2戻って:

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

最初にリストをソートする必要があることに注目する価値はあります。だから 'foo.sort()'これは、あなたがソートされているかどうかわからない場合。 –

+0

'foo = range(8)'のために動作しません – jamylak

関連する問題