2

(a, b)タプルのタイプwhereaおよびbが整数であるタプルのリストをソートしたいと考えています。リストをソートするためのキーは、 と の違いである必要があります。aつまりba - b同点を解消するには、 でソートする必要がありますa。どちらも降順です。

私はこれを使ってみました:

def sort(list):
        scores = sorted(list, key=lambda list: list[0], reverse=True)
        scores = sorted(list, key=lambda list: (a - b), reverse=True)

しかし、これは違いをソートし、タプルの最初の要素でソートされた要素を並べ替えているようです。

例えば:

入力:

[(75, 10),  (88, 4), (93, 9), (80, 5), (94, 10)]

期待される出力:

[(94, 10), (93, 9), (88, 4), (80, 5), (75, 10)]

得られた出力:

[(93, 9), (88, 4), (94, 10), (80, 5), (75, 10)]
4

5 に答える 5

4

複合キーでソートできます。

>>> def sort(list):
...     return sorted(list, key=(lambda (a, b): ((a - b), a)), reverse=True)
... 
>>> sort([(75, 10),  (88, 4), (93, 9), (80, 5), (94, 10)])
[(94, 10), (93, 9), (88, 4), (80, 5), (75, 10)]

便利なヒントについては、 Python Wiki の Sorting Howtoを参照してください。

于 2013-09-15T17:49:39.223 に答える
1
list_sorted = sorted(list, key = lambda x: (x[0]-x[1], x[0]), reverse=True)

The lambda for key can return tuples whose order can indicate the sort priorities.

于 2013-09-15T17:50:11.970 に答える
0

申し訳ありませんが、私は関係を壊しませんでした:/。複雑なものを使用せずに注文しました...ここ:

def sort(list):
    scores = sorted(list, key=lambda a: a[0], reverse=True)

    return scores

print sort([(75, 10),  (88, 4), (93, 9), (80, 5), (93, 11), (94, 10)])

コンソール:

[(94, 10), (93, 9), (93, 11), (88, 4), (80, 5), (75, 10)]

違いを並べ替えると、ab、これが結果です。

def sort(list):

    scores = sorted(list, key=lambda a: a[0], reverse=True)
    scores = sorted(list, key=lambda a: a[0]-a[1], reverse=True)

    return scores

print sort([(75, 10),  (88, 4), (93, 9), (80, 5), (93, 11), (94, 10)])

コンソール:

[(88, 4), (93, 9), (94, 10), (93, 11), (80, 5), (75, 10)]
于 2013-09-15T18:00:05.847 に答える