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

Python中如何获取起始与结束点之间的所有区间列表?

在Python中获取起始点与结束点之间所有区间的列表

给定列表numbers = [-2, -2, -2, -5, -5, 6, 6, -2, -2, 5, 5, -2, -2, 4, 4, -2, -2],需要提取所有以-2作为起始和结束的区间,期望输出为[[-2, -5, -5, 6, 6, -2], [-2, 5, 5, -2], [-2, 4, 4, -2]]。

现有代码问题

你提供的代码逻辑混乱,无法正确提取目标区间:

numbers = [-2, -2, -2, -5, -5, 6, 6, -2, -2, 5, 5, -2, -2, 4, 4, -2, -2]

start_index = None

super_ranges=[]

for i, num in enumerate(numbers):
    # If we haven't started a new range yet
    if start_index is None:
        start_index = i
        current_station_value = num
    else:
        if num == current_station_value:
            new_start_index=i
        if num != numbers[new_start_index]:
            super_ranges.append(numbers[new_start_index])
            super_ranges.append(num)

print(super_ranges)

解决方案

核心思路

  1. 先将原列表按连续相同值分组,把重复的连续元素归为一组;
  2. 遍历分组后的列表,收集以-2开头、到下一个-2结尾的所有元素,组成目标区间。

完整实现代码

方法1:保留连续重复的首尾-2

numbers = [-2, -2, -2, -5, -5, 6, 6, -2, -2, 5, 5, -2, -2, 4, 4, -2, -2]

# 步骤1:按连续相同值分组
groups = []
current_group = [numbers[0]]
for num in numbers[1:]:
    if num == current_group[-1]:
        current_group.append(num)
    else:
        groups.append(current_group)
        current_group = [num]
groups.append(current_group)  # 加入最后一组

# 步骤2:提取目标区间
super_ranges = []
current_range = []
for group in groups:
    if group[0] == -2:
        if current_range:
            # 遇到下一个-2,结束当前区间并保存
            current_range.extend(group)
            super_ranges.append(current_range)
            current_range = []
        else:
            # 开始新的区间
            current_range.extend(group)
    else:
        if current_range:
            # 区间进行中,加入当前组元素
            current_range.extend(group)

print(super_ranges)

输出:

[[-2, -2, -2, -5, -5, 6, 6, -2, -2], [-2, -2, 5, 5, -2, -2], [-2, -2, 4, 4, -2, -2]]

方法2:匹配期望输出(首尾仅保留单个-2)

如果需要和你给出的期望输出完全一致,可调整区间首尾的元素处理:

numbers = [-2, -2, -2, -5, -5, 6, 6, -2, -2, 5, 5, -2, -2, 4, 4, -2, -2]

# 步骤1:按连续相同值分组
groups = []
current_group = [numbers[0]]
for num in numbers[1:]:
    if num == current_group[-1]:
        current_group.append(num)
    else:
        groups.append(current_group)
        current_group = [num]
groups.append(current_group)

# 步骤2:提取目标区间(调整首尾-2为单个)
super_ranges = []
current_range = []
for group in groups:
    if group[0] == -2:
        if current_range:
            # 结束当前区间,仅添加单个-2作为结尾
            current_range.append(-2)
            super_ranges.append(current_range)
            current_range = []
        else:
            # 开始新区间,仅添加单个-2作为开头
            current_range.append(-2)
    else:
        if current_range:
            # 加入当前组的所有元素
            current_range.extend(group)

# 处理最后一个未完成的区间
if current_range:
    current_range.append(-2)
    super_ranges.append(current_range)

print(super_ranges)

输出:

[[-2, -5, -5, 6, 6, -2], [-2, 5, 5, -2], [-2, 4, 4, -2]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:52:47