脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 一文带你了解Python列表生成式应用的八重境界

一文带你了解Python列表生成式应用的八重境界

2022-09-02 15:09赵卓不凡 Python

在Python中有非常多且好用的技巧,其中使用最多的是列表生成式,往往可以将复杂的逻辑用简单的语言来实现,本文重点介绍列表生成式应用的八重境界

1. 引言

在Python中有非常多且好用的技巧,其中使用最多的是列表生成式,往往可以将复杂的逻辑用简单的语言来实现,本文重点介绍列表生成式应用的八重境界。
闲话少说,我们直接开始吧!

2. Level1: 基础用法

最最简单的列表生成式,举例如下:

?
1
2
3
a = [1, 2, 3]
b = [n*2 for n in a]
# b = [2, 4, 6]

上述代码实现了对列表中单个元素求平方的操作。

3. Level2: 加入条件语句

其实,我们可以在列表生成式中添加if来获取我们需要的元素,举例如下:

?
1
2
3
a = [1, 2, 3, 4, 5]
b = [n for n in a if n<4]
# b = [1, 2, 3]

上述代码中,我们添加了一个条件来决定在列表生成式中应该保留哪些元素。这里我们的条件是,如果n<4,则只保留小于4的数。

4. Level3: 加入 enumerate()

我们知道,枚举函数enumerate()可以同时生成元素以及相应的元素的索引。如果我们需要元素的索引以及元素,我们可以在列表生成式中使用函数enumerate()。

举例如下:

?
1
2
3
a = ["apple", "orange", "pear"]
b = [(i,fruit) for i,fruit in enumerate(b)]
# b is [(0,"apple"), (1,"orange"), (2,"pear")]

5. Level4: 加入 zip()

更进一步,我们知道函数zip()可以非常方便地使我们同时遍历2个或多个列表。

在列表生成式中加入函数zip(),样例如下:

?
1
2
3
4
a = ["apple", "orange", "pear"]
a2 = ["pie", "juice", "cake"]
b = [i+j for i,j in zip(a, a2)]
# b is ["applepie", "orangejuice", "pearcake"]

6. Level5: 加入三目运算符

三元运算符A if condition else B允许我们根据条件将每个元素转换为其他元素。

在列表生成式中同样可以使用三目运算符,样例如下:

?
1
2
3
a = [56, 45, 76, 23]
b = [("pass" if n>=50 else "fail") for n in a]
# b is ["pass", "fail", "pass", "fail"]

7. Level6: 嵌套循环

其实,我们当然也可以在列表生成式中使用嵌套循环,我们来看个例子,如下:

?
1
2
3
4
a = [10, 20, 30]
a2 = [1, 2, 3]
b = [i+j for i in a for j in a2]
# b is [11, 12, 13, 21, 22, 23, 31, 32, 33]

实质上,上述实现等价代码如下:

?
1
2
3
4
newlist = []
for i in a:
    for j in a2:
        newlist.append( i+j )

8. Level7: 嵌套列表生成式

更高级一点,我们可以在列表生成式中嵌套列表生成式,举例如下:

?
1
2
3
a = [1, 2, 3]
b = [[i for i in range(1, n+1)] for n in a]
# b is [[1], [1, 2], [1, 2, 3]]

9. Level8: 合并上述所有技巧

最后的最后,让我们将上述介绍的几个技巧进行合并,我们来看如下例子:

?
1
2
3
a = [1, 2, 3, 4, 5]
b = [[xx if xx>yy else yy for xx in range(x) for yy in range(y)] for i,(x,y) in enumerate(zip(a, a[::-1])) if i%2==0]
# [[0, 1, 2, 3, 4], [0, 1, 2, 1, 1, 2, 2, 2, 2], [0, 1, 2, 3, 4]]

上述实现意义不大,我们尝试应用上了上面介绍的所有技巧,但是毕竟代码可读性太大。其主要目的还是为了说明我们可以结合多种技巧,来使我们的列表生成式实现更加强大的功能。

10. 应用栗子

好吧,我们来看个实际的应用例子吧!

假设我们班级上有如下同学信息:

?
1
2
3
4
5
6
7
students = [
    ("bob", "m", [67, 89, 60]),
    ("alice", "f", [97, 85, 61]),
    ("cassie", "f", [78, 91, 89]),
    ("tim", "m", [47, 57, 24]),
    ("tom", "m", [91, 79, 72]),
]

上述列表展示了每个学生的姓名、性别和考试成绩,这里假设如果一个学生的平均分数≥ 50,那么这个学生有资格获奖。这里我们需要编写代码,来找到上述列表中有资格获奖的男生。

样例代码如下:

?
1
2
x = [(name, "eligible" if sum(scores)/len(scores) >=50 else "not eligible") for name,gender,scores in students if gender=="m"]
#[('bob', 'eligible'), ('tim', 'not eligible'), ('tom', 'eligible')]

11. 总结

本文重点介绍了理解Python中的列表生成式的八重境界,并给出了相应的代码示例。

以上就是一文带你了解Python列表生成式应用的八重境界的详细内容,更多关于Python列表生成式的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/sgzqc/article/details/126650419

延伸 · 阅读

精彩推荐
  • Pythonpython脚本框架webpy入门安装及应用创建

    python脚本框架webpy入门安装及应用创建

    这篇文章主要为大家介绍了python脚本框架web.py的入门安装及应用创建过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...

    枫少文6002022-03-04
  • Pythonpython绘制趋势图的示例

    python绘制趋势图的示例

    这篇文章主要介绍了python如何绘制趋势图,帮助大家更好的用python绘制图像,进行数据可视化分析,感兴趣的朋友可以了解下...

    aWolfMan12002020-09-18
  • Python使用Python & Flask 实现RESTful Web API的实例

    使用Python & Flask 实现RESTful Web API的实例

    下面小编就为大家带来一篇使用Python & Flask 实现RESTful Web API的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    阿凡卢9122020-12-08
  • Python利用Python计算质数与完全数的方法实例

    利用Python计算质数与完全数的方法实例

    这篇文章主要介绍了利用Python计算质数与完全数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    手机电脑7899612021-09-16
  • PythonPython高斯消除矩阵

    Python高斯消除矩阵

    今天小编就为大家分享一篇关于Python高斯消除矩阵,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    staHuri10412021-05-11
  • PythonPandas中Series的创建及数据类型转换

    Pandas中Series的创建及数据类型转换

    这篇文章主要介绍了Pandas中Series的创建及数据类型转换,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下...

    菜鸟实战10952022-08-23
  • Python一篇文章搞懂Python Unittest测试方法的执行顺序

    一篇文章搞懂Python Unittest测试方法的执行顺序

    unittest是Python标准库自带的单元测试框架,是Python版本的JUnit,下面这篇文章主要给大家介绍了如何通过一篇文章搞懂Python Unittest测试方法的执行顺序,需要的朋...

    软件测试君12372022-01-07
  • Pythonpython自动发邮件库yagmail的示例代码

    python自动发邮件库yagmail的示例代码

    本篇文章主要介绍了python自动发邮件库yagmail的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    虫师8452021-01-17