python 列表推导式与条件赋值

388 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

列表推导式与条件赋值

在生成一个数字序列的时候,在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]