如何按x值对含多元素的嵌套列表实现升序与降序排序?
解决嵌套列表按x值排序的问题
核心思路
要实现按子列表中x=xx的数值排序,关键是通过key参数提取每个子列表对应的x值作为排序依据:
- 遍历子列表元素,筛选出以
x=开头的字符串 - 从该字符串中提取数字部分并转为整数,作为排序的判断基准
从小到大排序代码
original_list = [["bla","blabla","x=17"],["bla","x=13","z=13","blabla"],["x=27","blabla","bla","y=24"]] # 升序排序 sorted_asc = sorted(original_list, key=lambda sublist: int(next(s.split('=')[1] for s in sublist if s.startswith('x=')))) print(sorted_asc)
输出结果:
[["bla","x=13","z=13","blabla"],["bla","blabla","x=17"],["x=27","blabla","bla","y=24"]]
从大到小排序代码
只需在sorted()中添加reverse=True参数即可实现降序:
# 降序排序 sorted_desc = sorted(original_list, key=lambda sublist: int(next(s.split('=')[1] for s in sublist if s.startswith('x='))), reverse=True) print(sorted_desc)
输出结果:
[["x=27","blabla","bla","y=24"],["bla","blabla","x=17"],["bla","x=13","z=13","blabla"]]
代码说明
next(s.split('=')[1] for s in sublist if s.startswith('x=')):遍历子列表,定位到x=开头的字符串,分割后提取数值部分- 转为
int是为了确保按数字大小排序,而非字符串的字典序 sorted()函数不会修改原列表,会返回新的排序后的列表
内容的提问来源于stack exchange,提问作者BlueInundation
相关产品推荐
相关产品推荐

