假设我有以下列表
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']
这个已被重新排序。
您需要检查是否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'
是否是False
的'Q1'
子字符串,另一方面'Q1' in '2017 Q1
'是True
我不确定结果列表是否正确,因为您的条件是(主控句点(,这永远不会是真的。 为什么不做一些简单的事情,比如:
filtered = []
for period in periods:
for master in master_list:
if master in period:
filtered.append(period)