我有两个列表,一个是主题列表,最多可以从2到4个主题。第二个列表是报告列表,它提供信息,我们是否需要该主题的报告。你知道吗
报告列表的可能值为:
无论是否需要报表,函数report\ U required都返回一个列表,并返回一个列表。如果列表包含所有“无”值,则表示不需要报告。你知道吗
例如:我有:
reporting_list = ["Chemistry_No_Report", "Mathematics_All_Report]
subject_list = ["Subject", "Chemistry", "Physics" , "Mathematics"]
我的主题列表总是以值主题开始,返回映射值时我会忽略该值
我的返回值应该是["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
建立一个将主题名称映射到索引的字典,并使用它访问报表列表的元素。这样,就避免了第3和第4种情况的二次复杂性。你知道吗
对于第一种和第二种情况:准备一个填有Yes-es的列表和一个填有No-s的列表。然后你就可以使用它们,不管这种情况在报告列表中出现的频率有多高。 注意:您可以使用['Yes']*4,就像您在初始化报表列表时所做的那样。你知道吗
总体复杂性是“几乎”线性的(假设O(1)字典访问…)
编辑:如果一个主题可以多次出现在主题列表中,则这不起作用。 但是你可以建立一个字典,在其中存储每个主题的答案,在第二阶段,遍历主题列表并输出每个主题的答案。你知道吗
相关问题 更多 >
编程相关推荐