筛选出与另一个列表匹配的列表元素,并保留原始列表顺序

时间:2018-10-25 03:28:08

标签: python list

让我说以下列表

periods = ['2017 Q1', 'TEST2', '2018 Q4','2017 Q2', '2019Q3', '2017 Q3', '2017 Q4', '2017 FY', 'TEST']

我想过滤句点以返回列表中包含该列表元素的任何元素

master_list = ['Q1', 'Q2', 'Q3', 'Q4', 'S1', 'S2', 'FY']

所以我希望

filtered = ['2017 Q1', '2018 Q4','2017 Q2', '2019 Q3', '2017 Q3', '2017 Q4', '2017 FY']

当我做这样的事情

a = [period for period in periods for master in master_list if period in master]

但这返回:

filtered = ['2017 Q1', '2017 Q2', '2019 Q3', '2017 Q3', '2017 Q4' ,'2018 Q4' ,'2017 FY']

此商品已重新排序。

2 个答案:

答案 0 :(得分:2)

您需要检查是否master in period

master_list = ['Q1', 'Q2', 'Q3', 'Q4', 'S1', 'S2', 'FY']
periods = ['2017 Q1', 'TEST2', '2018 Q4', '2017 Q2', '2019Q3', '2017 Q3', '2017 Q4', '2017 FY', 'TEST']
a = [period for period in periods for master in master_list if master in period]

print(a)

输出

['2017 Q1', '2018 Q4', '2017 Q2', '2019Q3', '2017 Q3', '2017 Q4', '2017 FY']

说明

表达式'2017 Q1' in 'Q1'检查'2017 Q1'是否为'Q1'的{​​{1}}的子串,另一方面False'为'Q1' in '2017 Q1

答案 1 :(得分:0)

我不确定结果列表是否正确,因为您的条件是(主周期),因此永远不会为True。 为什么不做一些简单的事情:

filtered = []
for period in periods:
  for master in master_list:
    if master in period:
      filtered.append(period)