如何对合并后的Python列表按两个字段排序?解决索引越界问题
问题分析与解决
错误原因
你通过zip(a,b)生成的列表c,每个元素是长度为2的元组,结构为(a中的子列表, b中的字符串),比如(['2022', 4], 'Random1')。元组的索引只有0和1,你写的i[2]超出了索引范围,因此触发IndexError: tuple index out of range。
修正方案
如果你的需求是先按a子列表里的第二个元素(即数字4、5)排序,再按b中的字符串排序,可以用以下两种方式实现:
方式1:原地修改原列表
list.sort()是原地排序方法,执行后会直接修改原列表c,且返回值为None,不需要赋值给变量:
c.sort(key=lambda i: (i[0][1], i[1]))
方式2:生成新的排序后列表
如果需要保留原列表c,使用sorted()函数生成新的排序后列表:
c_sorted = sorted(c, key=lambda i: (i[0][1], i[1]))
验证示例
假设调整b的顺序为b=["Random2","Random1"],执行修正后的代码后,c_sorted的输出为:
[(['2022', 4], 'Random1'), (['2023', 5], 'Random2')]
内容的提问来源于stack exchange,提问作者SeaTurtle
相关产品推荐
相关产品推荐

