我有两个列表,一个是主题列表,最多可以有2到4个主题。第二个列表是报告列表,它提供信息,我们是否需要针对该主题的报告。
报告列表的可能值为:
函数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
答案 0 :(得分:0)
构建一个字典,将主题名称映射到索引,并使用它来访问report_list的元素。这样,您就可以避免第3和第4箱的二次复杂性。
对于第一和第二种情况:准备一个填充了Yes-es的列表和一个填充No-s的列表。然后您可以使用它们,无论该情况出现在reporting_list中的频率如何。 注意:您可以使用['是'] * 4,就像在report_list的初始化中一样。
整体复杂性“几乎”是线性的(假设O(1)字典访问...)
编辑:如果主题可以在主题列表中多次出现,则不起作用。 但是你可以建立一个字典,在其中存储每个主题的答案,在第二阶段,浏览主题列表并输出每个主题的答案。