Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pythonzip函数将两个列表一起排序_Python_List_Sorting_Zip - Fatal编程技术网

使用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')]