2017-07-12 19 views
0

私は2Dポイントのリストをx座標でソートしています。たとえば、リストをソート順に並べ替える

l=[(1,2),(2,1),(4,2),(5,1),(6,7),(7,2)] 

このリストをy座標でソートしたいと思いますが、3つの要素ごとに並べ替える必要があります。

​​

はPythonで、このようなものはありますか私の問題へのエレガントな解決策がある:

l=[(2,1),(1,2),(4,2),(5,1),(7,2),(6,7)] 

を意味

私はこのような何かを見つけるcouldntの?

答えて

1

あなたがソート組み合わせることができ、リストの内包表記を使用して

from operator import itemgetter 
from itertools import chain 
l=[(1,2),(2,1),(4,2),(5,1),(6,7),(7,2)] 
list(chain.from_iterable(sorted(l[i:i+3], key=itemgetter(1)) for i in range(0, len(l), 3))) 

itertools.chain、あなたも、チェーンの使用を避けることができます。

[x for y in (sorted(l[i:i+3], key=itemgetter(1)) for i in range(0, len(l), 3)) for x in y] 
+0

大丈夫私はこれをチェックしますが、私は持っていけない場合は、このことも可能ですタプルは保持しているオブジェクトですか? – greedsin

+0

はいキーは、オブジェクトを受け取り、同等のキーを返すものであればどれでもかまいません。たとえば、 'key = lambda obj:obj.its_tuple [1]' – Gribouillis

関連する問題