我想排序这个元组列表,首先是整数的值,然后是每个元组中的字符串的长度,但不知道如何去做。根据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')]