根据元组中的元素是否相等,我需要按不同顺序对两个列表的元组进行排序。

3

我有两个可能的列表,一个是名字,另一个是年龄。我的函数需要返回这些列表的副本,使它们按照年龄(降序)排序(即lst1中员工的姓名也需要按照他们在lst2中的年龄排序)。如果两个或多个员工年龄相同,则还需要按照姓名排序(这次按照升序排列:A-Z)。

以下是我的代码。我能够生成这两个列表,但我不确定如何更改具有相同年龄的名称的顺序,以与其余列表相反的顺序排序。我知道应该使用一个循环,但不确定如何开始。

list_sorting(['Chris','Amanda','Boris','Charlie'],[35,43,55,35])

def list_sorting(lst1,lst2):
    zipped=zip(lst2,lst1)
    sorted_pairs= sorted(zipped,reverse=True)   
    tuples=zip(*sorted_pairs)
    list1,list2 = [ list(tuple) for tuple in tuples]
    return list2,list1

我得到的输出是:

(['Boris', 'Amanda', 'Chris', 'Charlie'], [55,43,35,35])

但为了使其正确,Chris和Charlie需要交换位置。

1
这个回答解决了你的问题吗?根据另一个列表中的值对列表进行排序 - Soroosh Noorzad
3个回答

3
你只需要一个元组键。元组包含年龄的负值和姓名。所以按照年龄的负值升序排序将导致按年龄降序排序。 并且随着排序,姓名会按升序排序。
def list_sorting(lst1,lst2):
    zipped=zip(lst2,lst1)
    sorted_pairs = sorted(zipped, key= lambda x: (-x[0], x[1]))   
    ages, names = list(zip(*sorted_pairs))
    return names, ages

print(list_sorting(['Chris','Amanda','Boris','Charlie'],[35,43,55,35]))

输出

(base) C:\Users\albin\Documents\codebase>python test.py
(('Boris', 'Amanda', 'Charlie', 'Chris'), (55, 43, 35, 35))

0

您可以先使用键(1/age, name)按降序排序(即按年龄升序和姓名降序),然后反转结果(即按年龄降序和姓名升序):

def my_sort(names, ages):
    tmp = sorted(zip(ages, names), reverse=True, key=lambda x: (1/x[0], x[1]))
    ages, names = zip(*reversed(tmp))
    return names, ages

0
你可以使用这个:
def list_sorting(l1, l2):
    # First zip your code, and sort it:
    res = list(sorted(zip(l2, l1)))
    # Then unzip your code and send it back as a list of lists. Done!
    return [[i for i, j in res], [j for i, j in res]]


print(list_sorting(['Chris', 'Amanda', 'Boris', 'Charlie'], [35, 43, 55, 35]))

结果:

[[35, 35, 43, 55], ['Charlie', 'Chris', 'Amanda', 'Boris']]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接