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

Python实现按同名元素时间差规则过滤Element对象数组

问题背景

给定如下Python基础代码:

import datetime

class Element(object):
    name: str
    datetime: datetime.datetime
    
    def __init__(self, *args, **kwargs):
        self.name = args[0]
        self.datetime = args[1]
        
    def __str__(self):
        return self.name + " " + self.datetime.strftime("%d-%m-%Y %H:%M:%S")
        
e = Element("Name 1", datetime.datetime(2022, 1, 5, 20, 20, 20))
e2 = Element("Name 1", datetime.datetime(2022, 1, 5, 20, 20, 23))
e3 = Element("Name 2", datetime.datetime(2022, 2, 5, 19, 11, 10))
e4 = Element("Name 3", datetime.datetime(2022, 3, 5, 10, 15, 10))
e5 = Element("Name 3", datetime.datetime(2022, 3, 5, 10, 15, 8))
e6 = Element("Name 4", datetime.datetime(2022, 4, 7, 12, 12, 8))
e7 = Element("Name 4", datetime.datetime(2022, 4, 7, 12, 12, 20))

array = [e, e2, e3, e4, e5, e6, e7]
new_array = []

实现要求:代码中定义的Element类包含字符串类型name属性、datetime类型datetime属性,目前7个实例化对象已存入array数组,需要填充空数组new_array,满足规则:同名元素之间的datetime时间差小于5秒时,不得同时保留在新数组中。

实现思路
  • 首先按name属性对所有元素分组,不同名称的元素不受规则限制,无需做时间差校验。
  • 对每个同名分组内的元素,按datetime从小到大排序,避免乱序导致时间差错判、漏判。
  • 逐一遍历排序后的同组元素,记录组内上一个被保留元素的时间:如果当前元素和上一个保留元素的时间差≥5秒,就将当前元素加入结果集,同时更新最后保留的时间标记;如果时间差小于5秒直接跳过当前元素。
  • 所有分组处理完成后,得到的结果集就是符合要求的new_array。
完整实现代码
from collections import defaultdict

# 按名称对元素分组
name_group = defaultdict(list)
for elem in array:
    name_group[elem.name].append(elem)

for name, elems in name_group.items():
    # 同组元素按时间升序排列
    sorted_elems = sorted(elems, key=lambda x: x.datetime)
    if not sorted_elems:
        continue
    # 每组第一个元素直接保留
    new_array.append(sorted_elems[0])
    last_keep_time = sorted_elems[0].datetime
    # 遍历后续元素做时间差判断
    for elem in sorted_elems[1:]:
        diff = (elem.datetime - last_keep_time).total_seconds()
        if diff >= 5:
            new_array.append(elem)
            last_keep_time = elem.datetime

# 打印结果验证
for item in new_array:
    print(item)

运行后输出结果如下,完全符合规则要求:

Name 1 05-01-2022 20:20:20
Name 2 05-02-2022 19:11:10
Name 3 05-03-2022 10:15:08
Name 4 07-04-2022 12:12:08
Name 4 07-04-2022 12:12:20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:03:26