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

如何按指定索引筛选嵌套列表?日期筛选代码修正求助

解决嵌套列表的日期筛选问题

我来帮你搞定这个筛选逻辑!你的原代码有两个关键问题导致结果不符合预期:

  • 没有精准定位到每个子列表的日期元素(索引[1]),反而遍历了子列表的所有元素
  • 条件判断的方向搞反了:应该是「筛选关键词在日期字符串里」,而不是「日期字符串在筛选关键词里」

问题根源拆解

原代码里的if x in f完全搞反了逻辑:比如你想匹配2019-12-08,但'2019-12-08' in '2019-'是False,只有当x是No-Date时,'No-Date' in 'No-Date'才是True,这就是为什么只有无日期的条目被筛选出来。

正确的循环实现

我们只需要针对每个子列表的索引[1]元素做判断,同时修正条件方向:

lim = [ ['xxx', 'No-Date', 'xxx'], ['xxx', '2019-12-08', 'xxx'], ['xxx', '2019-07-12', 'xxx'], ['xxx', '2018-11-13', 'xxx'], ['xxx', '2017-10-03', 'xxx'], ['xxx', '2016-01-05', 'xxx'], ['xxx', '2019-10-24T15:09:00+02:00', 'xxx'], ]

li_zj = []
filter_years = ['2018-', '2019-']
for line in lim:
    date_item = line[1]
    # 满足条件:要么是无日期,要么包含2018/2019的年份前缀
    if date_item == 'No-Date' or any(year in date_item for year in filter_years):
        li_zj.append(line)

print(li_zj)

更简洁的列表推导式实现

用列表推导式可以一行搞定,逻辑和上面完全一致:

lim = [ ['xxx', 'No-Date', 'xxx'], ['xxx', '2019-12-08', 'xxx'], ['xxx', '2019-07-12', 'xxx'], ['xxx', '2018-11-13', 'xxx'], ['xxx', '2017-10-03', 'xxx'], ['xxx', '2016-01-05', 'xxx'], ['xxx', '2019-10-24T15:09:00+02:00', 'xxx'], ]

filter_years = ['2018-', '2019-']
li_zj = [line for line in lim if line[1] == 'No-Date' or any(y in line[1] for y in filter_years)]

print(li_zj)

验证输出

运行上面的代码,会得到你期望的结果:

[ ['xxx', 'No-Date', 'xxx'], ['xxx', '2019-12-08', 'xxx'], ['xxx', '2019-07-12', 'xxx'], ['xxx', '2018-11-13', 'xxx'], ['xxx', '2019-10-24T15:09:00+02:00', 'xxx'], ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:44:48