Python3萌新入门笔记(22)

这一篇教程,我们一起了解列表推导式(List Comprehension)和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表达式可以让代码非常简化。

本节知识点:

1、列表推导式;

2、lambda表达式。

本节英文单词与中文释义:

1、square:平方

2、even:偶数

3、comprehension:理解

4、lambda:希腊字母λ的英文名称,大名鼎鼎的游戏半条命里面的logo就是这个。

练习:

从姓名集合中筛选出姓氏为“李”的姓名。

name_set = {‘邢佳栋’, ‘李学庆’, ‘高昊’, ‘潘粤明’, ‘戴军’, ‘薛之谦’, ‘贾宏声’, ‘于波’, ‘李连杰’, ‘王斑’, ‘蓝雨’, ‘刘恩佑’,’任泉’, ‘李光洁’, ‘姜文’, ‘黑龙’, ‘张殿菲’, ‘邓超’, ‘张杰’, ‘杨坤’, ‘沙溢’, ‘李茂’, ‘黄磊’, ‘于小伟’, ‘刘冠翔’,’秦俊杰’, ‘张琳’, ‘陈坤’, ‘黄觉’, ‘邵峰’, ‘陈旭’, ‘马天宇’, ‘杨子’, ‘邓安奇’, ‘赵鸿飞’, ‘马可’, ‘黄海波’,’黄志忠’, ‘李晨’, ‘后弦’, ‘王挺’, ‘何炅’, ‘朱亚文’, ‘胡军’, ‘许亚军’, ‘张涵予’, ‘贾乃亮’, ‘陆虎’, ‘印小天’,’于和伟’, ‘田亮’, ‘夏雨’, ‘李亚鹏’, ‘胡兵’, ‘王睿’, ‘保剑锋’, ‘于震’, ‘苏醒’, ‘胡夏’, ‘张丰毅’, ‘刘翔’,’李玉刚’, ‘林依轮’, ‘袁弘’, ‘朱雨辰’, ‘丁志诚’, ‘黄征’, ‘张子健’, ‘许嵩’}

答案:(见原文评论1楼)

转载自:魔力 • Python » Python3萌新入门笔记(22)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Python入门笔记,我可以提供一些基本的知识点: 1. 在Python中,数字和字符串不能直接进行加法运算,只能是字符串和字符串的拼接。 2. 在编写Python程序时,如果在字符串中使用单引号,需要注意使用成对出现的单引号。如果使用单个单引号,可能会导致解析器报错。 3. 在Python中,逻辑运算符'and'和'or'不一定会计算右侧表达式的值。有时只需计算左侧表达式即可得出结果。这是因为'and'和'or'会将其中一个表达式的值作为最终结果,而不仅仅是True或False。 4. Python的流程控制中,顺序结构是最基本的结构,按照代码的编写顺序依次执行。 这些是Python入门笔记中的一些要点,希望对你有所帮助。如果你有其他问题,欢迎继续提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python入门课程笔记](https://blog.csdn.net/YV_LING/article/details/123413336)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [python入门学习笔记](https://blog.csdn.net/Lalalalazy/article/details/113181549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值