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

Python双列表匹配提取问题:提取Decline状态对应测试日期

问题描述

有两个长度相同的列表,分别存储测试执行日期和审批状态:

TestDate_lst = ['2022-03-24', '2022-03-24', '2022-03-24', '2022-03-04', '2022-03-24',
'2021-04-20', '2021-04-20']

Action_lst = ['Decline', 'Decline', 'Decline', 'Approve', 'Approve', 'Ignore', 'Decline']

需求:提取所有Action_lst中状态为Decline对应的TestDate_lst中的日期。

尝试的错误代码:

DateTest = []

for i in TestDate_lst:
    for a in Action_lst:
        if a == "Decline":
           DateTest.append(i)
        else:
           pass

错误输出:

DateTest_lst = ['2022-03-24', '2022-03-24', '2022-03-24', '2022-03-24', '2022-03-24',
'2022-03-24', '2022-03-24', '2022-03-24', '2022-03-24', '2022-03-24', '2022-03-24',
'2022-03-24', '2022-03-04', '2022-03-04', '2022-03-04', '2022-03-04', '2022-03-24',
'2022-03-24', '2022-03-24', '2022-03-24', '2021-04-20', '2021-04-20', '2021-04-20',
'2021-04-20']

预期输出:

DateTest_lst = ['2022-03-24', '2022-03-24', '2022-03-24', '2021-04-20']
解决方案

你的问题出在嵌套循环——外层遍历每个日期,内层遍历所有状态,导致每个日期会被添加多次(次数等于Decline的总数)。正确的做法是同时遍历对应位置的日期和状态,只在当前状态是Decline时添加对应日期。

方法1:使用zip()遍历对应元素

zip()可以将两个列表按索引配对,直接遍历每一组日期和状态:

DateTest = []
for date, action in zip(TestDate_lst, Action_lst):
    if action == "Decline":
        DateTest.append(date)

方法2:使用索引遍历

如果需要操作索引,也可以通过range()遍历索引值,然后取对应位置的元素:

DateTest = []
for idx in range(len(TestDate_lst)):
    if Action_lst[idx] == "Decline":
        DateTest.append(TestDate_lst[idx])

方法3:列表推导式(简洁写法)

用一行代码实现,效率更高:

DateTest = [date for date, action in zip(TestDate_lst, Action_lst) if action == "Decline"]

以上三种方法都会得到预期输出:

['2022-03-24', '2022-03-24', '2022-03-24', '2021-04-20']

至于你提到的字典,其实没必要——因为两个列表是按顺序一一对应的,用zip直接配对是最直接的方案,字典适合需要键值映射且去重的场景,这里并不适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:50:25