Eth*_*han 1 python list-comprehension
有关python可迭代理解的一般问题:
为什么这样的陈述
[s for s in x if s>2]
Run Code Online (Sandbox Code Playgroud)
在if之后的去for,但像声明
[s if s>2 else None for s in x]
Run Code Online (Sandbox Code Playgroud)
在if... else之前的云for?
条件表达式和理解过滤器唯一的共同点是关键字 的共享使用if。
a if b else c是一个条件表达式。目的是保证值是否b正确。它的使用不特定于列表理解;在中,[s if s > 2 else None for s in x]它只是用作用于为新列表提供值的表达式(给定s来自的值)x。
的另一种用法if是列表理解本身语法的一部分。它不是表达式的一部分;它指定一个过滤器,该过滤器用于确定是否应将迭代器中的特定值传递给表达式。
如果你觉得列表理解为组合的map和filter,则表达式采用函数参数的地方map,而if过滤器需要以呼叫的地方filter。也就是说,您可以重写任何常规列表理解
[ <expression> for s in xs if <p>]
Run Code Online (Sandbox Code Playgroud)
作为一个组合map,并filter因此:
list(map(lambda s: <expression>, filter(lambda s: <p>, xs)))
Run Code Online (Sandbox Code Playgroud)
你可以看到PEP-202为约列表内涵的讨论(虽然它是旧的,并且不提供可能被考虑任何其他的语法)和PEP-308的条件表达式这确实讨论认为一些替代语法。
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |