簡體   English   中英

通過添加元組的第二個和第三個元素對元組列表進行排序

[英]Sorting a list of tuples by the addition of second and third element of the tuple

我有一個元組列表,它是:

[('g', 10, 2), ('o', 6, 11), ('v', 2, 4), ('t', 1, 15), ('x', 40, 3), ('m', 4, 4), ('k', 10, 2), ('f', 14, 1), ('p', 70, 90), ('l', 21, 7), ('n', 1, 27), ('a', 39, 70), ('d', 11, 10), ('h', 21, 10), ('c', 10, 19), ('b', 8, 1), ('e', 30, 39), ('i', 23, 29), ('r', 8, 7), ('q', 2, 2), ('s', 18, 86)]

我正在努力解決如何對它們進行排序,以便它們可以像這樣放置:

[('p', 70, 90), ('a', 39, 70), ('s', 18, 84), ('è', 27, 45), ('e', 30, 39), ('i', 23, 29), ('x', 40, 3), ('h', 21, 10), ('c', 10, 19), ('l', 20, 7), ('d', 11, 10), ('o', 6, 11), ('t', 1, 15), ('f', 14, 1), ('r', 8, 7), ('g', 10, 2), ('k', 10, 2), ('n', 1, 11), ('b', 8, 1), ('m', 4, 4), ('v', 2, 4), ('q', 2, 2)]

它應該是元組的第二個和第三個元素的添加,當它們是相同的ex時。 (a,10,9)(b,9,10)它們應按字母順序排序。 它是用python 3.5編寫的,我無法調用任何庫

您可以將元組設置為對列表進行排序的鍵:

sorted(lst, key = lambda x: (sum(x[1:]), x[0]))

通過這種方式,它將首先按元組的最后兩個元素的總和,然后按元組的第一個元素進行排序。

如果你喜歡降序的結果,正如@Moses評論的那樣,你可以將reverse參數指定為True

sorted(lst, key = lambda x: (sum(x[1:]), x[0]), reverse = True)

更新 :要以不同的方式處理降序,升序,因為此處的sum是數字,您也可以否定sum 通過這種方式,它會為降序排列sum ,但對於字母的第一個字母。

sorted(lst, key = lambda x: (-sum(x[1:]), x[0]))
sorted(a, key=lambda x: (sum(x[1:3]), x[0]))

其中a是你的清單。 如果你需要逆轉:

sorted(a, key=lambda x: (sum(x[1:3]), x[0]), reverse=True)
a = [('g', 10, 2), ('o', 6, 11), ('v', 2, 4), ('t', 1, 15),
     ('x', 40, 3), ('m', 4, 4), ('k', 10, 2), ('f', 14, 1),
     ('p', 70, 90), ('l', 21, 7), ('n', 1, 27), ('a', 39, 70),
     ('d', 11, 10), ('h', 21, 10), ('c', 10, 19), ('b', 8, 1),
     ('e', 30, 39), ('i', 23, 29), ('r', 8, 7), ('q', 2, 2),
     ('s', 18, 86)]

創建一個函數,它將返回項目的總和,並使用該函數作為排序鍵。 我喜歡在從iterables中提取項目時使用operator.itemgetter()。

import operator
second_third_first_items = operator.itemgetter(1, 2, 0)
def key(thing):
    *two_three, one = second_third_first_items(thing)
    return (sum(two_three), one)
a.sort(key = key, reverse = True)

沒有operator.itemgetter的key

def key(thing):
    one, *two_three = thing[:3]
    return (sum(two_three), one)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM