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

时间:2013-03-20 19:13:19

标签: python list

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

报告列表的可能值为:

  • All_Subjects,这意味着我们需要报告所有科目。
  • No_Subject表示我们不需要任何主题的报告
  • 最后格式为SubjectName_(All | NO)_Report,这意味着对于特定主题我们是否需要报告。 -subject_list = [“主题”,“化学”,“物理”,“数学”,“生物”] #sequence始终保持不变。
  • reporting_list可以是[“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

1 个答案:

答案 0 :(得分:0)

构建一个字典,将主题名称映射到索引,并使用它来访问report_list的元素。这样,您就可以避免第3和第4箱的二次复杂性。

对于第一和第二种情况:准备一个填充了Yes-es的列表和一个填充No-s的列表。然后您可以使用它们,无论该情况出现在reporting_list中的频率如何。 注意:您可以使用['是'] * 4,就像在report_list的初始化中一样。

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

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