递推式构造列表 | Python

    技术2022-07-10  114

    我们先定义一个简单的函数,它会算变量的平方并加 5:

    >>> def stupid_func(x): >>> return x**2 + 5

    如果我们希望将该函数应用到列表中的奇数项,那么不采用递推式构造列表的情况下,我们一般会写成以下形式:

    >>> my_list = [1, 2, 3, 4, 5] >>> new_list = [] >>> for x in my_list: >>> if x % 2 != 0: >>> new_list.append(stupid_func(x)) >>> print(new_list) [6, 14, 30]

    但是现在我们有了递推式构造列表,那么上面代码可以等价修改为:

    >>> my_list = [1, 2, 3, 4, 5] >>> print([stupid_func(x) for x in my_list if x % 2 != 0]) [6, 14, 30]

    递推式构造列表的一般语法可以表示为[ expression for item in list ],如果你希望加上一些布尔型条件语句,那么上面的语法可以修改为 [ expression for item in list if conditional ],它的结构其实和下面是等价的。

    >>> for item in list: >>> if conditional: >>> expression

    上面的递推式构造列表可以进一步简化,即不需要定义一个新函数。

    >>> print([x ** 2 + 5 for x in my_list if x % 2 != 0]) [6, 14, 30]
    Processed: 0.009, SQL: 9