在生成一个数字序列的时候,在Python
中可以如下写出:
L = [] def my_func(x): return 2*x for i in range(5): L.append(my_func(i)) L
[0, 2, 4, 6, 8]
事实上可以利用列表推导式进行写法上的简化:[* for i in *]
。其中,第一个*
为映射函数,其输入为后面i
指代的内容,第二个*
表示迭代的对象。
[my_func(i) for i in range(5)]
[0, 2, 4, 6, 8]
列表表达式还支持多层嵌套,如下面的例子中第一个for
为外层循环,第二个为内层循环:
[m+'_'+n for m in ['a', 'b'] for n in ['c', 'd']]
['a_c', 'a_d', 'b_c', 'b_d']
除了列表推导式,另一个实用的语法糖是带有if
选择的条件赋值,其形式为value = a if condition else b
:
value = 'cat' if 2>1 else 'dog' value
'cat'
等价于如下的写法:
a, b = 'cat', 'dog' condition = 2 > 1 # 此时为True if condition: value = a else: value = b
下面举一个例子,截断列表中超过5的元素,即超过5的用5代替,小于5的保留原来的值:
L = [1, 2, 3, 4, 5, 6, 7] [i if i <= 5 else 5 for i in L]
[1, 2, 3, 4, 5, 5, 5]