如何按元组第二个元素升序排序元组列表,现有代码报错如何解决
按元组第二个元素排序的问题解决
报错原因
你代码里的Lnew.remove(Lnew[i][1])是错误根源:
Lnew的元素是由原元组转换来的列表(比如[2,5]、[1,2]这类结构)Lnew[i][1]是数值类型(比如第一个循环里取到的是5),你尝试在元素全为列表的Lnew里删除一个数值,肯定找不到对应元素,所以抛出list.remove(x): x not in list错误。
另外你的代码还存在其他逻辑问题:
- 嵌套循环逻辑混乱,反复排序、修改元素值的操作完全没必要
- 你把列表转回元组的操作
tuple(elt)没有赋值保存,等于没执行 - 最后返回的是未修改的原列表
L,就算前面逻辑正确也拿不到结果
最简实现方案
Python内置的sorted()函数和列表自带的sort()方法都支持自定义key参数指定排序依据,直接用这个特性一行就能搞定需求:
def sorting(L): # key指定按每个元组的索引为1的元素(也就是第二个元素)排序 return sorted(L, key=lambda x: x[1])
测试效果:
sample = [(2, 5), (1, 2), (4, 4), (2, 3), (2, 1)] print(sorting(sample)) # 输出:[(2, 1), (1, 2), (2, 3), (4, 4), (2, 5)]
如果你不想生成新列表,要直接修改原列表,可以用列表的sort方法:
def sorting(L): L.sort(key=lambda x: x[1]) return L
内容的提问来源于stack exchange,提问作者Miykayah10
相关产品推荐
相关产品推荐

