如何按首尾元素匹配规则排序嵌套列表的子列表?
按特定规则拼接嵌套子列表
我需要将多个子列表组合成一个符合以下规则的嵌套列表:
- 第一个子列表必须是首元素为0的列表
- 后续每个子列表的首元素需与前一个子列表的尾元素相同
举个实际例子:
输入子列表集合:[0, 3], [7, 0], [3, 8], [8, 7]
期望输出的嵌套列表:[[0, 3], [3, 8], [8, 7], [7, 0]]
解决方案(Python实现)
可以通过构建映射字典快速匹配下一个子列表,具体代码如下:
def chain_sublists(sublists): # 建立「子列表首元素 → 对应子列表」的映射字典 start_to_sublist = {item[0]: item for item in sublists} result = [] # 找到起始子列表(首元素为0) current_item = start_to_sublist[0] result.append(current_item) # 循环拼接直到所有子列表都被加入 while len(result) < len(sublists): next_start = current_item[1] current_item = start_to_sublist[next_start] result.append(current_item) return result # 测试示例 input_list = [[0, 3], [7, 0], [3, 8], [8, 7]] print(chain_sublists(input_list)) # 输出结果:[[0, 3], [3, 8], [8, 7], [7, 0]]
逻辑说明
- 先通过字典建立索引,这样每次查找下一个匹配的子列表只需要O(1)时间,避免了反复遍历所有子列表的低效操作
- 从首元素为0的子列表开始,作为拼接的起点
- 每次取当前子列表的尾元素,去字典中找到对应的下一个子列表,加入结果列表
- 循环直到结果列表的长度和输入子列表的长度一致,确保所有元素都被正确拼接
更新:问题已解决!感谢所有贡献者!
内容的提问来源于stack exchange,提问作者Alan Mott
相关产品推荐
相关产品推荐

