让我说以下列表
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']
此商品已重新排序。
答案 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)