Python3 列表推导式/lambda表达式

Python 投稿 70900 0 评论

以下主要是针对Python3中列表推导式和lambda表达式介绍和示例。

了解列表推导式。

列表推导式的官方定义:一种采用简洁的方式来处理序列中的全部或部分元素,并返回结果列表。

定义中的序列实际上是指可迭代对象。

我们先来看一个例子,创建一个整数1~6平方的列表。

示例代码:

lst = [x * x for x in range(1, 7)]  # 列表推导式:循环获取范围1~6的整数,计算乘积后添加到新列表。
print(lst)  # 显示输出结果为:[1, 4, 9, 16, 25, 36]

上方代码中,创建列表时使用了列表推导式。

后方的for循环能够从1~6的范围取出整数,前方的计算公式将取出的整数自身相乘。

每一次循环都会取出数字和计算乘积,添加到一个新的列表中。

除了迭代取出元素和设定计算方法形成列表,列表推导式还能够设置条件,满足条件的元素才能够经过计算添加到列表。

例如,我们只需要1~6中偶数的平方。

示例代码:

lst = [x * x for x in range(1, 7) if x % 2 == 0]  # 列表推导式:循环获取范围1~6的整数,符合条件时,计算乘积后添加到新列表。
print(lst)  # 显示输出结果为:[4, 16, 36]

上方代码中,我们加入了条件,当取出的元素取余2为0时,进行计算。

由此我们能够看出列表推导式的组成为:[元素(或计算方法) for循环(允许多个) if语句]

再来看个例子,从整数列表中取出小于3的元素,并从平方列表中取出对应的元素,组成算式列表。

期待显示输出结果为:[‘1²=1’, ‘2²=4’, ‘3²=9’]

示例代码:(错误示例)

number = [1, 2, 3, 4, 5, 6]  # 整数列表
square = [1, 4, 9, 16, 25, 36]  # 平方列表
lst = ['{0}²={1}'.format(str(x), str(y)) for x in number for y in square if x <= 3]
print(lst)

上方代码运行结果为:

运行的结果和我们期待的不一样。

实际上,在列表推导式中有多个循环时,会出现嵌套循环的效果,而不是同步循环的效果。

也就是说,当前面的循环取出第1个元素,后方的循环会进行一轮迭代;当前面的循环取出第2个元素,后方的循环又会进行一轮迭代;以此类推,直到前方的循环完成一轮迭代为止。(可以观察显示结果的列表元素和排列顺序)

那么,如何能够得到正确的结果呢?

我们需要增加条件,当前方循环取出元素的平方等于后方循环取出元素的时候,再添加到列表。

示例代码:(正确)

number = [1, 2, 3, 4, 5, 6]  # 整数列表
square = [1, 4, 9, 16, 25, 36]  # 平方列表
lst = ['{0}²={1}'.format(str(x), str(y)) for x in number for y in square if x <= 3 and x * x == y]
print(lst) # 显示输出结果为:['1²=1', '2²=4', '3²=9']

以上代码等同于下方代码。

示例代码:

number = [1, 2, 3, 4, 5, 6]
square = [1, 4, 9, 16, 25, 36]
lst = [] # 此部分用列表推导式替代
for x in number: # 此部分用列表推导式替代
    for y in square: # 此部分用列表推导式替代
        if x <= 3 and x * x == y: # 此部分用列表推导式替代
            lst.append('{0}²={1}'.format(str(x), str(y))) # 此部分用列表推导式替代
print(lst)

通过上方代码,大家可以看出,创建同样的列表,使用列表推导式更加简洁。

了解lambda表达式。

lambda表达式的官方定义:一个匿名内联函数,由一个表达式组成,在函数被调用时求值。

创建lambda函数的语法: lambda [参数] : 表达式

lambda表达式可用于函数的参数。

例如,我们从一个整数列表中筛选所有的偶数,可以使用filter函数。

这个函数的参数是function和iterable,也就是1个函数和1个可迭代对象。

示例代码:

def iseven(n):  # 定义验证数字是否偶数的函数
    if n % 2 == 0:  # 判断参数是否为偶数
        return True  # 符合条件返回真值
    else:
        return False #否则返回假值

lst = list(filter(iseven, number)) # 通过函数iseven对每个number的元素进行验证,验证为真的保留,并将最终结果转换为list。
print(lst) # 显示输出结果为:[2, 4, 6]

从上面的示例中,我们能够看到函数(iseven)可以作为另外一个函数(filter)的参数,并通过这个函数对其它参数进行处理。

filter函数会把number的每一个元素作为函数iseven的参数传入,进行计算,并将返回结果。

不过这样的代码,很明显看上去有些复杂。

我们可以使用lambda表达式这种匿名函数作为参数,起到同样的作用。

number = [1, 2, 3, 4, 5, 6]  # 整数列表

lst = list(filter(lambda x: x % 2 == 0, number)) # 通过lambda表达式对每个number的元素进行验证,并将所有验证结果转换为list。
print(lst) # 显示输出结果为:[2, 4, 6]

上方代码中,每一个number的元素都会作为lambda表达式的参数(冒号前面的x)进行验证,如果符合条件(冒号后方的表达式),则会保留元素。

很显然,在这种情况下通过lambda表达式可以让代码非常简化。

编程笔记 » Python3 列表推导式/lambda表达式

赞同 (56) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽