One-line list comprehension: if-else variants
更多的是关于python列表理解语法。我有一个列表理解,可以生成给定范围内奇数的列表:
1 | [x for x in range(1, 10) if x % 2] |
这就构成了一个过滤器——我有一个源列表,其中删除了偶数(
1 2 3 4 5 | >>> [x for x in range(1, 10) if x % 2 else x * 100] File"<stdin>", line 1 [x for x in range(1, 10) if x % 2 else x * 100] ^ SyntaxError: invalid syntax |
号
有一个类似if else的python表达式:
1 | 1 if 0 is 0 else 3 |
如何在列表理解中使用它?
1 | [ x if x%2 else x*100 for x in range(1, 10) ] |
混淆源于您在第一个示例中使用了一个过滤器,但在第二个示例中没有。在第二个示例中,您只需要使用三元运算符表达式将每个值映射到另一个值。
使用过滤器,您需要:
1 | [ EXP for x in seq if COND ] |
号
如果没有过滤器,您需要:
1 | [ EXP for x in seq ] |
在第二个例子中,这个表达式是一个"复杂"的表达式,它恰好涉及一个
1 | [x if x % 2 else x * 100 for x in range(1, 10) ] |
。
你也可以通过列表理解来做到这一点:
1 2 | A=[[x*100, x][x % 2 != 0] for x in range(1,11)] print A |
。
只是另一个解决方案,希望有人会喜欢它:
使用:【假,真】【表达式】
1 2 3 | >>> map(lambda x: [x*100, x][x % 2 != 0], range(1,10)) [1, 200, 3, 400, 5, 600, 7, 800, 9] >>> |
我能做到这一点
1 2 3 | >>> [x if x % 2 != 0 else x * 100 for x in range(1,10)] [1, 200, 3, 400, 5, 600, 7, 800, 9] >>> |
。