在一个lin中嵌套python中的for循环

2024-06-09 14:15:42 发布

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

这里有一些代码,我正在努力使其更可读。它可以工作,但是嵌套的for循环和try/if使得乍看之下有点难以理解发生了什么。

有人能给我一些建议,告诉我如何加入嵌套for循环或压缩这些代码吗?

matcher = None
if re.match(_RE_OBJECT, nodes.replace(LQMN, '')):
  matcher = alias
else:    
  for x in lister[0].conditions:
    for y in x.codes:
      try:
        if y.id.split(',')[1] == condition:
          matcher = x.codenames
      except IndexError:
        pass

Tags: 代码inrenoneforifobjectmatch
2条回答

可以使用一行if和continue语句而不是try语句:

some_var = y.id.split(',')
if len(some_var) < 2: continue
if some_var[1] == condition:
    matcher = x.codenames

并用有意义的名称替换一些变量。

可以使用生成器表达式嵌套循环并添加使IndexError处理程序过时的筛选器:

candidates = ((x, y) for x in lister[0].conditions for y in x.codes if ',' in y.id)
for x, y in candidates:
    if y.id.split(',')[1] == condition:
        matcher = x.codenames

在这里,除了使用xy之外,使用更有意义的名称会更好地提高可读性:

candidates = ((cond, code) for cond in lister[0].conditions for code in cond.codes
              if ',' in code.id)
for cond, code in candidates:
    if code.id.split(',')[1] == condition:
        matcher = cond.codenames

相关问题 更多 >