Python 里面有个很棒的语法糖 (syntactic sugar), 它就是 list comprehension , 有人把它翻译成 "列表推导式", 也有人翻译成 "列表解析式". 名字听上去很难理解, 但是看它的语法就很清晰了. 虽然名字叫做 list comprehension, 但是这个语法同样适用于 dict,set 等这一系列可迭代(iterable) 数据结构.
语法规范:
out_list = [out_express for out_express in input_list if out_express_condition]
其中的 if 条件判断根据需要可有可无.
下面看一个具体的例子, 生成一个包含 10 以内的偶数的 list:
接着我们用列表推导式实现该功能:
还是一行代码就搞定, 但一行里面有两个 for, 看起来很乱, 两个 for, 哪个在前哪个在后呢? 只要记住他们的顺序和不用推导式的原始 for 循环是一致的即可.
推导式的可读性
一行代码搞定几行代码的事情, 看上去很简洁, 但是读起来很费劲, 尤其是当条件语句很长的时候, 把这一行代码变得很长, 超过了代码规范规定的长度(一般是 80 个字符), 也使得理解代码变得困难.
面对一行长长的代码该如何下口读, 如何理解呢? 别着急, 好在 Python 允许在中括号, 花括号之间断行:
列表推导式的断行:
通过以上讲解就可以轻松掌握 Python 的列表推导式 (list comprehension) 了, 简而言之, 就是把普通的多行 for 循环压缩成一行代码, 这种压缩语法适用于列表, 字典, 集合等可迭代数据结构(iterables).
文章版权归属于 [ 猿人学] www.yuanrenxue.com
来源: http://www.jianshu.com/p/6ed693e33754