【问题标题】:I need to sort two lists of tuples in different orders depending on whether elements in the tuples are equal or not我需要根据元组中的元素是否相等,以不同的顺序对两个元组列表进行排序
【发布时间】:2021-07-18 08:31:18
【问题描述】:

我有两个可能的列表,一个是名字,第二个是年龄。我的函数需要返回这些列表的副本,以便它们都按年龄排序(降序)(即,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])

但为了正确,克里斯和查理需要交换位置。

【问题讨论】:

标签: python list loops sorting tuples


【解决方案1】:

您只需要一个带有元组的键。元组包含年龄和姓名的负数。因此,对负年龄进行升序排序将导致年龄降序排序。 并且名称按升序排列。

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))

【讨论】:

    【解决方案2】:

    您可以先使用键(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
    

    【讨论】:

      【解决方案3】:

      你可以用这个:

      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']]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-24
        • 2012-03-11
        • 2021-07-25
        • 2011-05-21
        • 1970-01-01
        • 2016-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多