私は 2 つのリストを持っています。2 番目のリストは、件名のレポートが必要かどうかについての情報を提供するレポート リストです。
レポート リストの可能な値は次のとおりです。
- All_Subjects は、すべての被験者のレポートが必要であることを意味します。
- No_Subject は、どの件名についてもレポートを必要としないことを意味します
- 最後に、SubjectName_(All|NO)_Report という形式で、特定の件名についてレポートが必要かどうかを意味します。-subject_list = ["Subject", "Chemistry", "Physics" , "Mathematics" , "Bio"] #sequence は常に同じままです。
- Reporting_list は ["All_Subjects", "No_Subjects", "Chemistry_No_Report","Chemistry_All_Report"] にすることができます #シーケンスは関係ありません
関数 report_required は、レポートが必要かどうかのリストを返し、リストを返します。リストの値がすべて「なし」の場合は、レポートが不要であることを意味します。
例:私は持っています:
reporting_list = ["Chemistry_No_Report", "Mathematics_All_Report]
subject_list = ["Subject", "Chemistry", "Physics" , "Mathematics"]
私の subject_list は常に値 Subject で始まります。これは、マップされた値を返すときに無視し
、戻り値は["No", None, "Yes"]
以下の私の現在の機能は機能します.2つのリスト値に基づいて3番目のリストをマッピングするより効率的な方法はありますか.
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