在 python 中在一行中嵌套 for 循环

ner*_*ary 1 python for-loop nested

这是我试图提高可读性的一些代码。它可以工作,但是嵌套的 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
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

您可以使用生成器表达式来嵌套循环并添加使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
Run Code Online (Sandbox Code Playgroud)

可读性会更多使用比其他更有意义的名称来改善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
Run Code Online (Sandbox Code Playgroud)