You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套元组转换为指定包含区间的配对列表

嵌套元组转包含区间列表的实现方案

问题描述

我有一段代码会返回带嵌套括号的元组,这些元组代表交替的排除区间与包含区间。示例嵌套元组如下:

((None, 6), 16)

以及

(((None, 1), 6), 16)

需要将它们转换为仅保留包含区间的配对列表,转换规则通过以下示例说明:

((None, 6), 16) 应转换为 [(6, 16)]

(((None, 1), 6), 16) 应转换为 [(0,1), (6, 16)]

((None, 8), 17) 应转换为 [(8, 17)]

(((None, 2), 8), 17) 应转换为 [(0, 2), (8, 17)]

(((((None, 2), 3), 4), 8), 17) 应转换为 [(0, 2), (3, 4), (8, 17)]

核心规则:若开括号数量为偶数,则第一个区间为排除区间,需省略。例如:

((((None, 2), 4), 5), 6) 应转换为 [(2, 4), (5, 6)]

实现思路

  1. 拆解嵌套元组:递归遍历嵌套元组,提取所有区间端点(包括None),整理成有序的端点列表。比如((((None,2),3),4),8),17)会被拆解为[None,2,3,4,8,17]。
  2. 判断起始区间类型:通过端点列表长度计算总区间数(端点数量-1),若区间数为偶数,第一个区间是排除区间需跳过;若为奇数,第一个区间是包含区间需保留。
  3. 生成包含区间:遍历端点两两配对,将None替换为0,根据起始规则筛选出所有需要保留的包含区间。

Python 实现代码

def parse_nested_tuple(t):
    # 递归提取所有端点
    endpoints = []
    def extract(node):
        if isinstance(node, tuple):
            if len(node) == 2:
                extract(node[0])
                endpoints.append(node[1])
        else:
            endpoints.append(node)
    extract(t)
    
    interval_count = len(endpoints) - 1
    # 区间数为偶数时,第一个是排除区间,需跳过
    skip_first = interval_count % 2 == 0
    result = []
    
    for i in range(interval_count):
        start = endpoints[i] if endpoints[i] is not None else 0
        end = endpoints[i+1]
        # 根据规则判断是否保留当前区间
        if (i == 0 and skip_first) or (i % 2 == 1 and not skip_first):
            continue
        result.append((start, end))
    return result

验证示例

测试给定的所有案例:

# 示例1
print(parse_nested_tuple(((None, 6), 16)))  # 输出: [(6, 16)]
# 示例2
print(parse_nested_tuple((((None, 1), 6), 16)))  # 输出: [(0, 1), (6, 16)]
# 示例3
print(parse_nested_tuple(((((None, 2), 3), 4), 8), 17))  # 输出: [(0, 2), (3, 4), (8, 17)]
# 规则验证示例
print(parse_nested_tuple(((((None, 2), 4), 5), 6)))  # 输出: [(2, 4), (5, 6)]

代码逻辑说明

  1. 递归提取端点:extract函数递归遍历嵌套元组,按顺序收集所有端点,确保区间顺序正确。
  2. 跳过规则判断:总区间数为偶数时,第一个区间是排除区间,后续交替保留包含区间;奇数时直接从第一个区间开始交替保留。
  3. 区间转换:自动将None替换为0,筛选符合要求的区间并整理成列表返回。

内容的提问来源于stack exchange,提问作者Simd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:58:29