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

遍历子列表查找未匹配今日日期的元素名称,代码结果不符求助

问题修正:筛选嵌套列表中未匹配今日日期的元素名称

我需要遍历嵌套列表里的子列表,返回未匹配今日日期的元素名称。

示例输入

x = [['service_2023_01_10', 'service_2023_01_11', 'service_2023_01_12'], ['forms_2023_01_10', 'forms_2023_01_11']]

today = '2023_01_12'

预期输出

result = [[], ['forms']]

需求说明

service对应的子列表包含匹配今日日期的元素,所以返回空列表;forms的子列表中没有任何元素匹配今日日期,因此返回其前缀['forms']。

我编写的代码返回结果与预期相反(得到[['service'], []]),代码如下:

result = [[e.split("_")[0] for e in sublist if "_".join(e.split("_")[-3:]) == today] if any([ "_".join(e.split("_")[-3:]) == today for e in sublist]) else [] for sublist in x]

修正方案

你的代码逻辑完全颠倒了:当前逻辑是保留匹配今日日期的元素前缀,仅在子列表存在匹配项时返回,否则返回空。要实现需求,需要调整判断逻辑:

  1. 检查子列表中是否没有任何元素匹配今日日期
  2. 若满足条件,返回该子列表对应的元素前缀(默认子列表内元素前缀一致,取第一个元素拆分即可)
  3. 若存在匹配项,返回空列表

简洁版修正代码

result = [[sublist[0].split("_")[0]] if not any("_".join(e.split("_")[-3:]) == today for e in sublist) else [] for sublist in x]

兼容空列表的健壮版代码

如果存在子列表为空的场景,可添加空值判断:

result = []
for sublist in x:
    if not sublist:
        result.append([])
        continue
    has_matching_date = any("_".join(e.split("_")[-3:]) == today for e in sublist)
    result.append([sublist[0].split("_")[0]] if not has_matching_date else [])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:45:29