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

解决Python处理重叠区间时出现tuple不支持元素赋值的报错问题

报错根因

你虽然将入参的外层容器做了列表转换,但列表内存储的每个区间本身仍是不可修改的元组类型。嵌套循环中遍历拿到的y是元组,传入check_overlap函数后尝试直接修改元组的元素,就会触发'tuple' object does not support item assignment报错。

修复思路
  1. 放弃修改原有元组的逻辑,处理重叠时生成新的区间对象
  2. 补全所有重叠场景的处理逻辑,覆盖四类情况:
  • 产品区间完全被品牌区间覆盖:直接丢弃该产品区间
  • 产品区间完全包含品牌区间:拆分出不重叠的前后两段
  • 产品区间左半部分和品牌重叠:保留右侧不重叠部分
  • 产品区间右半部分和品牌重叠:保留左侧不重叠部分
修复后代码
def remove_overlapping_products(brand_positions, product_positions):
    result = []
    for prod_start, prod_end in product_positions:
        current_start, current_end = prod_start, prod_end
        
        for brand_start, brand_end in brand_positions:
            # 无重叠直接跳过
            if current_end < brand_start or current_start > brand_end:
                continue
            # 产品区间完全被品牌区间覆盖,直接丢弃
            if current_start >= brand_start and current_end <= brand_end:
                current_start = current_end = None
                break
            # 产品区间完全包含品牌区间,拆分前半段保留,后半段继续校验
            elif current_start < brand_start and current_end > brand_end:
                result.append((current_start, brand_start - 1))
                current_start = brand_end + 1
            # 产品左半段重叠,更新起始位置
            elif current_start >= brand_start:
                current_start = brand_end + 1
            # 产品右半段重叠,更新结束位置
            else:
                current_end = brand_start - 1
        
        # 处理后的区间合法则加入结果
        if current_start is not None and current_start <= current_end:
            result.append((current_start, current_end))
    return result
效果验证

输入示例:

print(remove_overlapping_products([(0, 10)], [(8, 23)]))

输出:

[(11, 23)]

和预期结果一致。

内容的提问来源于stack exchange,提问作者Márton Cséplő

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:24:07