我想排序這個元組列表,首先是整數的值,然後是每個元組中的字符串的長度,但不知道如何去做。根據python中的2個條件排序元組列表
[(10, 'ATAGCTAT'),(4, 'TTAGCTA'),(6, 'AATTAATCGAT'),(6, 'GCTATAGC')]
我想排序這個元組列表,首先是整數的值,然後是每個元組中的字符串的長度,但不知道如何去做。根據python中的2個條件排序元組列表
[(10, 'ATAGCTAT'),(4, 'TTAGCTA'),(6, 'AATTAATCGAT'),(6, 'GCTATAGC')]
嘗試
sorted(s, key=lambda v: (v[0], len(v[1]), v[1]))
這按照考慮的順序,使用sorted()
的參數key
來創建一個新的元組,該元組具有您想要基於排序的信息。
請注意,我包含實際字符串作爲元組中的第三個值,以斷開第一個值和字符串長度的關係。如果你喜歡,你可以刪除它。
對於你的榜樣,給人
In [1]: s = [(10, 'ATAGCTAT'), (4, 'TTAGCTA'), (6, 'AATTAATCGAT'), (6, 'GCTATAGC')]
In [2]: sorted(s, key=lambda v: (v[0], len(v[1]), v[1]))
Out[2]: [(4, 'TTAGCTA'), (6, 'GCTATAGC'), (6, 'AATTAATCGAT'), (10, 'ATAGCTAT')]
排序與整數值的一個數組和字符串項的長度:
lst = [(10, 'ATAGCTAT'), (4, 'TTAGCTA'), (6, 'AATTAATCGAT'), (6, 'GCTATAGC')]
lst_sorted = sorted(lst, key=lambda x: (x[0], len(x[1])))
print(lst_sorted)
# [(4, 'TTAGCTA'), (6, 'GCTATAGC'), (6, 'AATTAATCGAT'), (10, 'ATAGCTAT')]
用採用標準的自定義排序鍵你想要:
>>> l = [(10, 'ATAGCTAT'), (4, 'TTAGCTA'), (6, 'AATTAATCGAT'), (6, 'GCTAT
>>> sorted(l, key=lambda x: (x[0], len(x[1])))
[(4, 'TTAGCTA'), (6, 'GCTATAGC'), (6, 'AATTAATCGAT'), (10, 'ATAGCTAT')]
您可以使用sorted()函數並將參數傳遞給按照您的鍵排序標準。
以下教程提供了sorted()函數的不同示例。
https://docs.python.org/3.5/howto/sorting.html#sortinghowto
解決方案:
>>> mylist = [(10, 'ATAGCTAT'), (4, 'TTAGCTA'), (6, 'AATTAATCGAT'), (6, 'GCTATAGC')]
>>> sorted(mylist, key=lambda val: (val[0], len(val[1])))
[(4, 'TTAGCTA'), (6, 'GCTATAGC'), (6, 'AATTAATCGAT'), (10, 'ATAGCTAT')]