我有两个列表,一个是主题列表,最多可以有 2 到 4 个主题。第二个列表是报告列表,它提供信息,我们是否需要该主题的报告。
报告列表的可能值为:
- All_Subjects 这意味着我们需要所有主题的报告。
- No_Subject 这意味着我们不需要任何主题的报告
- 最后是格式,SubjectName_(All|NO)_Report,这意味着对于特定主题,我们是否需要报告。-subject_list = ["Subject", "Chemistry", "Physics" , "Mathematics" , "Bio"] #sequence 始终保持不变。
- 报告列表可以是 ["All_Subjects", "No_Subjects", "Chemistry_No_Report","Chemistry_All_Report"] #sequence 无所谓
函数report_required 无论我们是否想要报告都会返回一个列表,并返回一个列表。如果列表包含所有“无”值,则表示不需要报告。
例如:我有:
reporting_list = ["Chemistry_No_Report", "Mathematics_All_Report]
subject_list = ["Subject", "Chemistry", "Physics" , "Mathematics"]
我的 subject_list 始终以值 Subject 开头,在返回映射值时我会忽略它,
我的返回值应该是["No", None, "Yes"]
我当前的以下功能有效,是否有一种更有效的方法可以根据两个列表值映射出第三个列表。
def reportRequired( reporting_list , subject_list):
report_list = [None]*4
for value in reporting_list:
# subject_list starts with a header value "Subject", thats why iterating from index 1
if value.startswith("All"):
for idx in range(1, len(subject_list)):
report_list[idx-1] = "Yes"
if value.startswith("No"):
for idx in range(1, len(subject_list)):
report_list[idx-1] = "No"
if value.split("_")[1].lower() == "no":
for idx in range(1, len(subject_list)):
if value.split("_")[0].strip() == subject_list[idx]:
report_list[idx-1] = "No"
if value.split("_")[1].lower() == "all":
for idx in range(1, len(subject_list)):
if value.split("_")[0].strip() == subject_list[idx]:
report_list[idx-1] = "Yes"
return report_list