如何依据元素内的num2值对Python组合列表进行排序?
问题:基于动态变化的num2对组合列表排序
已知letter、num、num2三个列表的值会动态变化,需要基于num2的降序对组合后的输出列表进行排序。现有代码如下:
letter = ['A','B','C','D','E'] num = [7,6,1,1,1] num2 = [24000,20900,5250,4500,5000] output = [] for i in range(len(letter)): output.append((letter[i], num[i], num2[i]))
当前运行输出:
[('A', 7, 24000), ('B', 6, 20900), ('C', 1, 5250), ('D', 1, 4500), ('E', 1, 5000)]
期望得到的输出:
[('A', 7, 24000), ('B', 6, 20900), ('C', 1, 5250), ('E', 1, 5000), ('D', 1, 4500)]
解决方案
方法一:生成列表后排序
在原有代码基础上,添加排序逻辑,使用sorted()函数指定排序依据为元组的第三个元素(即num2对应的值),并设置降序:
letter = ['A','B','C','D','E'] num = [7,6,1,1,1] num2 = [24000,20900,5250,4500,5000] output = [] for i in range(len(letter)): output.append((letter[i], num[i], num2[i])) # 按num2降序排序 output = sorted(output, key=lambda x: x[2], reverse=True) print(output)
方法二:组合时直接排序(更简洁)
利用zip()函数直接组合三个列表,再进行排序,省去手动循环的步骤:
letter = ['A','B','C','D','E'] num = [7,6,1,1,1] num2 = [24000,20900,5250,4500,5000] # 直接组合三个列表并按num2降序排序 output = sorted(zip(letter, num, num2), key=lambda x: x[2], reverse=True) print(output)
两种方法都能实现需求,且无论num2的值如何动态变化,排序逻辑都会自动基于最新的num2值执行,输出符合预期的排序结果。
内容的提问来源于stack exchange,提问作者mcsmachado
相关产品推荐
相关产品推荐

