使用pythonzip函数将两个列表一起排序
我的问题与将两个列表基本排序在一起有点不同 请参见以下代码示例:使用pythonzip函数将两个列表一起排序,python,list,sorting,zip,Python,List,Sorting,Zip,我的问题与将两个列表基本排序在一起有点不同 请参见以下代码示例: list1=[3,4,2,1,6,1,4,9,3,5,8] list2=['zombie','agatha','young','old','later','world', 'corona','nation','domain','issue','happy'] srt=sorted(list(zip(list1,list2)),reverse=True) print(srt) 结果是: [(9, 'nation'),
list1=[3,4,2,1,6,1,4,9,3,5,8]
list2=['zombie','agatha','young','old','later','world',
'corona','nation','domain','issue','happy']
srt=sorted(list(zip(list1,list2)),reverse=True)
print(srt)
结果是:
[(9, 'nation'), (8, 'happy'), (6, 'later'), (5, 'issue'),
(4, 'corona'), (4, 'agatha'), (3, 'zombie'), (3, 'domain'),
(2, 'young'), (1, 'world'), (1, 'old')]
问题:-正如我们所看到的,对于列表1中相同的值,列表2中的元素也按字母降序排列。如果我想按降序对列表1进行排序,然后按升序对列表2个元素进行排序,列表1元素的值以某种简单的方式相同,该怎么办。使用键函数
lambda k:(-k[0],k[1])
:
印刷品:
[(9, 'nation'), (8, 'happy'), (6, 'later'), (5, 'issue'), (4, 'agatha'), (4, 'corona'), (3, 'domain'), (3, 'zombie'), (2, 'young'), (1, 'old'), (1, 'world')]
这并不漂亮,但您可以执行“双精度”排序(),首先是通过
list2
值,然后反转list1
值:
from operator import itemgetter
list1=[3,4,2,1,6,1,4,9,3,5,8]
list2=['zombie','agatha','young','old','later','world',
'corona','nation','domain','issue','happy']
srt=sorted(sorted(zip(list1,list2), key=itemgetter(1)), key=itemgetter(0), reverse=True)
print(srt)
输出:
[(9, 'nation'), (8, 'happy'), (6, 'later'), (5, 'issue'), (4, 'agatha'), (4, 'corona'), (3, 'domain'), (3, 'zombie'), (2, 'young'), (1, 'old'), (1, 'world')]
sorted
可以接受任何iterable,因此您可以删除列表
:排序(zip(列表1,列表2),key=lambda x,y:(-x,y))
@LaurentPorte是的,很好。更新了我的答案。谢谢,成功了。一个查询,-k[0]表示第一个列表的降序,k[1]表示第二个列表的升序,对吗?希望我的直觉是正确的?@RishabhRao是的,没错,-k[0]
按第一个元素递减,k[1]
按第二个元素递增。注意:减号只适用于数字数据。哦,那么字符串降序如何?
[(9, 'nation'), (8, 'happy'), (6, 'later'), (5, 'issue'), (4, 'agatha'), (4, 'corona'), (3, 'domain'), (3, 'zombie'), (2, 'young'), (1, 'old'), (1, 'world')]