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

如何移除二维员工工时列表中的重复连续区间?

解决员工工时列表的重复条目问题

首先看你的需求:工时列表中存在连续重复的条目组(比如示例里索引0-1和2-3完全重复),需要移除重复的组,保留唯一的工时记录序列。

原代码的问题

你的代码逻辑存在几个关键问题:

  1. 比较逻辑不匹配需求:你是单个条目和隔两个的条目比较,但实际需要处理的是连续两组条目重复的情况,单个条目相等不代表整组重复,而且这种比较方式会导致后续处理混乱。
  2. 循环中断时机错误:else分支里直接赋值原列表并break,导致一旦遇到不相等的条目就终止处理,无法完成整个列表的去重。
  3. 截取方式无效:当找到重复时直接取l+2:的切片,这个切片本身还包含重复的条目(比如示例里索引2、3就是你要移除的重复项),等于没解决问题。

解决方案

针对你的场景,推荐按条目组去重的方式:把每两个条目视为一个薪资周期的完整记录组,先分组再去重,最后展开成原格式。

实现代码

def deduplicate_hours(hours_list):
    # 将工时列表按每2个条目分为一组(对应薪资周期的两周记录)
    groups = [hours_list[i:i+2] for i in range(0, len(hours_list), 2)]
    
    seen = set()
    unique_groups = []
    for group in groups:
        # 把组内的列表转成tuple(列表不可哈希,无法存入集合)
        group_tuple = tuple(tuple(item) for item in group)
        if group_tuple not in seen:
            seen.add(group_tuple)
            unique_groups.extend(group)
    
    return unique_groups

# 遍历所有员工,处理工时列表
for emp in employeeList:
    emp.hours = deduplicate_hours(emp.hours)
    print(f"{emp.name} 的去重后工时:{emp.hours}")

效果验证

用你的示例数据测试:
原工时列表:

[['(29/11/2020 to 12/12/2020)', 45.0], ['(29/11/2020 to 12/12/2020)', 48.0], ['(29/11/2020 to 12/12/2020)', 45.0], ['(29/11/2020 to 12/12/2020)', 48.0], ['(13/12/2020 to 26/12/2020)', 46.0], ['(13/12/2020 to 26/12/2020)', 32.5]]

处理后会得到:

[['(29/11/2020 to 12/12/2020)', 45.0], ['(29/11/2020 to 12/12/2020)', 48.0], ['(13/12/2020 to 26/12/2020)', 46.0], ['(13/12/2020 to 26/12/2020)', 32.5]]

完全符合你保留非重复条目的需求。

额外说明

如果你的重复模式不是固定的两组,而是任意位置的单个重复条目,可以调整逻辑为遍历整个列表,记录已出现过的条目(同样转成tuple存集合),跳过重复项:

def deduplicate_single_entries(hours_list):
    seen = set()
    unique_hours = []
    for item in hours_list:
        item_tuple = tuple(item)
        if item_tuple not in seen:
            seen.add(item_tuple)
            unique_hours.append(item)
    return unique_hours

但根据你的描述,显然按组去重更贴合你的业务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:17:18