Python列表推导式

Python进阶之一就是学会写列表推导式。列表推导式用较为优雅的方式生成列表,从而避免冗余代码,不过对于新手来讲,代码的可读性不高。我们先看下面一段示例。

>>>a = [1, 2, 3, 4]
>>>b = [item * 2 for item in a]
>>>b
[2, 4, 6, 8]

上述代码将一个列表中每一个元素加倍生成一个新的列表,可以写成如下更容易理解的形式:

>>>a = [1, 2, 3, 4]
>>>b = []
>>>for item in a:
...     b.append(item * 2)
...
>>>b
[2, 4, 6, 8]

结果是一样的,但是列表推导式所需的代码更少。如果我们只想保留偶数并加倍,可以这么写:

>>>a
[1, 2, 3, 4]
>>>b = [item * 2 for item in a if item % 2 == 0]
>>>b
[4, 8]

总结一下,Python列表推导式的模式为[expression for item in sequence if conditions]。列表推导式放在[]中;首先是一个表达式,定义了对每一个元素要做什么;接下来是一个for循环,从一个序列中依次拿出一个元素;最后是if条件,可以没有if条件。[]改为()得到的是一个生成器(generator),改为{}得到一个字典或者集合。
用列表推导式可以写出更有创意的代码,当然如果代码很难被读懂,应该尽量实现更好可读性的代码。可读性高的代码才更加具有生命力。