基于两个列表值映射出第三个列表

2024-03-28 09:04:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表,一个是主题列表,最多可以从2到4个主题。第二个列表是报告列表,它提供信息,我们是否需要该主题的报告。你知道吗

报告列表的可能值为:

  • 所有科目,这意味着我们需要所有科目的报告。你知道吗
  • 没有主题,这意味着我们不需要任何主题的报告
  • 最后是SubjectName |(All | NO)| Report的格式,这意味着对于特定的主题,我们是否需要报告。 -主题列表=[“主题”,“化学”,“物理”,“数学”,“生物”]#顺序始终保持不变。你知道吗
  • 报告列表可以是[“所有受试者”、“无受试者”、“化学无报告”、“化学所有报告”]#顺序不重要

无论是否需要报表,函数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

Tags: noinreport主题列表forlenif
1条回答
网友
1楼 · 发布于 2024-03-28 09:04:36

建立一个将主题名称映射到索引的字典,并使用它访问报表列表的元素。这样,就避免了第3和第4种情况的二次复杂性。你知道吗

对于第一种和第二种情况:准备一个填有Yes-es的列表和一个填有No-s的列表。然后你就可以使用它们,不管这种情况在报告列表中出现的频率有多高。 注意:您可以使用['Yes']*4,就像您在初始化报表列表时所做的那样。你知道吗

总体复杂性是“几乎”线性的(假设O(1)字典访问…)

编辑:如果一个主题可以多次出现在主题列表中,则这不起作用。 但是你可以建立一个字典,在其中存储每个主题的答案,在第二阶段,遍历主题列表并输出每个主题的答案。你知道吗

相关问题 更多 >