python - 如何在具有不同条件的列表上迭代两次?
问题描述
我有一个这样的for循环:
for category in enums.Category:
category_name = str(category.name)
internal_code = category.internal_code
if category_name in labels and not category.is_temporary_code:
field_label = labels[category_name]
self.fields[internal_code] = forms.BooleanField(label=field_label, required=False)
elif category_name in labels and category.is_temporary_code:
field_label = labels[category_name]
exp_date_label = labels[category_name] + " end date"
self.fields[internal_code] = forms.BooleanField(label=field_label, required=False)
self.fields[internal_code + "_end_date"] = forms.DateField(
label=exp_date_label, required=False
)
但是,这会遍历枚举 Category 实例并按实例的顺序生成结果(表单字段)。我如何编写这个循环,以便每个属于第一个“if”条件的实例首先设置其表单字段,然后重新运行循环以设置第二组实例的表单字段(来自 elif 语句)之后?
解决方案
你可以只有两个显式循环。在这种情况下,你的if
和elif
条件已经是互斥的,所以在第二种情况下不需要做if (condition2) and not (condition1):
,就if (condition2):
足够了。因此,这里有少量重复的代码,但可能不足以担心。
(我已经移动了块internal_code
内的分配if
,因为不需要评估条件。)
for category in enums.Category:
category_name = str(category.name)
if category_name in labels and not category.is_temporary_code:
internal_code = category.internal_code
field_label = labels[category_name]
self.fields[internal_code] = forms.BooleanField(label=field_label, required=False)
for category in enums.Category:
category_name = str(category.name)
if category_name in labels and category.is_temporary_code:
internal_code = category.internal_code
field_label = labels[category_name]
exp_date_label = labels[category_name] + " end date"
self.fields[internal_code] = forms.BooleanField(label=field_label, required=False)
self.fields[internal_code + "_end_date"] = forms.DateField(
label=exp_date_label, required=False
)
推荐阅读
- html - 周围的空白
- firebase - 用户已登录,但它的有效负载给出“未定义”作为结果
- buffer - 节点红色。从缓冲区中提取字节
- java - 无法解析符号文本视图
- c - gcc 和 clang 的 while(i--) 优化:他们为什么不使用 sub / jnc?
- php - 如何在 SolrClient 中更改路径
- dropbox - 在 Google Colab 中导入 .xlsx 本地数据时出现问题(用于 pandas)
- ios - 仅将 arm64 保留为有效架构的后果?
- python - 如何根据从命令行传递的参数打开文件并删除某些字符
- python - 在 SQLAlchemy 中编写数据库函数