语法允许多个 if 语句,因为您可以在 for 循环之间混合使用它们:
[j for i in range(100) if i > 10 for j in range(i) if j < 20]
理解组件应该被视为嵌套语句,上面翻译为:
lst = []
for i in range(100):
if i > 10:
for j in range(i):
if j < 20:
lst.append(j)
这也意味着您可以使用多个 if 语句,而两者之间没有 for 循环:
[i for i in range(100) if i > 10 if i < 20]
虽然没有意义(只需将使用 and 或链式运算符的那些组合起来),它仍然可以转换为合法的嵌套语句集:
lst = []
for i in range(100):
if i > 10:
if i < 20:
lst.append(i)
语法和解析器并没有明确禁止这种用法,就像 Python 不允许您嵌套 if 语句一样。
请注意,PEP 202 – List Comprehensions(将这个特性添加到语言中的原始提案文档)实际上在示例部分包含了双如果理解:
>>> print [(i, f) for i in nums for f in fruit if f[0] == "P" if i%2 == 1]
[(1, 'Peaches'), (1, 'Pears'), (3, 'Peaches'), (3, 'Pears')]