如何对形如cell(I,J)=Value的元素列表按索引完成排序?
如何对格式为cell(I,J) = Value的列表按索引排序
问题示例
- 输入列表:
[ cell(3,5) = 1, cell(7,6) = 2, cell(5,4) = 6, cell(9,7) = 8 ]
- 期望输出(按第一个索引I升序排序):
[ cell(3,5) = 1, cell(5,4) = 6, cell(7,6) = 2, cell(9,7) = 8 ]
实现方法
排序核心逻辑是提取每个cell元素的第一个索引I作为排序键,不考虑第二个索引J和存储值的影响,按I的数值升序排列即可,根据存储cell数据的格式不同,对应实现如下:
场景1:数据以结构化元组/对象形式存储
如果列表里的每个元素是按(I, J, Value)格式存储的元组,直接取元组第一个元素作为排序键即可,Python示例:
# 原始列表 cell_list = [(3, 5, 1), (7, 6, 2), (5, 4, 6), (9, 7, 8)] # 按I升序排序 sorted_list = sorted(cell_list, key=lambda item: item[0])
执行后sorted_list的结果和期望输出完全一致。
场景2:数据以字符串形式存储
如果列表里的每个元素是cell(I,J) = Value格式的字符串,先提取字符串里的I值再作为排序键即可,Python示例:
import re # 原始字符串格式列表 cell_str_list = ["cell(3,5) = 1", "cell(7,6) = 2", "cell(5,4) = 6", "cell(9,7) = 8"] def extract_first_index(cell_str): # 正则提取括号内第一个数字,即索引I i_value = int(re.search(r"cell\((\d+),", cell_str).group(1)) return i_value sorted_str_list = sorted(cell_str_list, key=extract_first_index)
执行后sorted_str_list的输出和期望结果匹配。
扩展说明
- 如果需要按第二索引J排序,只需要把排序键换成提取到的J值即可
- 如果需要降序排列,在
sorted函数中加入参数reverse=True - 其他编程语言实现逻辑一致,核心都是先提取I值作为排序比较的依据,再调用语言内置的排序函数完成排序
内容的提问来源于stack exchange,提问作者Someone
相关产品推荐
相关产品推荐

