3

通常の double ソートを実装するのは簡単です。

pairs = [(1, 2), (2, 1), (1, 3), (2, 4), (3, 1)]

sorted(pairs,key=lambda x: (x[0],x[1]))
# out: [(1, 2), (1, 3), (2, 1), (2, 4), (3, 1)]

2番目の要素を逆の順序で使用する方法に興味があります。これは、最初のアイテムでペアをグループ化し、次に並べ替えられた 2 番目のアイテムを一緒に追加することで簡単に実装できます。と の両方を使用してこれを実装しitertools.groupbyましdefaultdictた。それでも、通常のダブルソートよりもはるかに複雑なままなので、より簡潔な方法でそれを行うための巧妙なトリックがあるかどうか疑問に思います.

double_sort(pairs)
# out: [(1, 3), (1, 2), (2, 4), (2, 1), (3, 1)]

PS!私はそれを行う方法を知っておりnumpy.argsort、ほとんどの場合、標準の lib アプローチを見たいと思っています。

4

1 に答える 1

4

これは、数値および同様のデータ型で機能します

sorted(pairs, key=lambda x: (x[0], -x[1]))

これは、Python 2 でのみ、すべての同等の型で機能します:(

sorted(pairs, lambda x, y: cmp(x[0], y[0]) or cmp(y[1], x[1]))
于 2013-01-12T15:11:59.563 に答える