前言
学习一门语言最好的办法,就是教懂别人。在这,我会从 Python 最基础的教程写起,慢慢一步步进阶。Python 基础比较好的欢迎去精选文章里看看爬虫实战项目,欢迎指教。
上次讲列表 list 知识点的时候讲到了 for 循环,for 循环功能强大,可以把列表、元组、字典里的数据都遍历出来。今天讲的就是在 for 循环的基础上,用更简单的语法来表达,可以简化 for 操作,他就是 for 循环的加强版,中文名:列表生成式,英文名:list comprehensions。
语法特点
来源:Python 内置函数。
特点:语法简洁,功能强大。
作用:可以用来创建 lis 的生成式。
简单列表
如果是生成简单的列表,用 Python 内置函数 range() 生成,在用 list() 函数把数据变成列表。
1 2 3 4 |
print(list(range(1, 11))) #结果: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
加点难度,比如要显示出 1 到 50 之间公差为 5 的等差数列。也可以用 range() 生成,加一个步长的参数即可,不加的话默认步长为 1。
1 2 3 4 |
print(list(range(1, 51, 5))) # 步长为 5 #结果: [1, 6, 11, 16, 21, 26, 31, 36, 41, 46] |
1 |
复杂列表
继续加难度,要生成 [1×1,2×2,3×3,4×4,5×5] 怎么做?可以用循环解决。
1 2 3 4 5 6 7 |
L = [] for i in range(1, 6): L.append(i*i) print(L) #结果: [1, 4, 9, 16, 25] |
有没有更简洁的表达方式呢?有,用列表生成式就可以。一行代码就可以搞定。
列表生成式
1 2 3 4 |
print([x*x for x in range(1, 6)]) #结果: [1, 4, 9, 16, 25] |
其中,x*x 为你最终要生成数据的表达式,for 循环表达式出来的每个数据会依次作用在前面的表达式中形成一个新的列表。
筛选数据
当然,for 循环后面也可以加 if 条件去生成筛选符合条件的数据,比如筛选出 1 到 5 中奇数的平方。
1 2 3 4 |
print([x*x for x in range(1, 6) if x % 2 == 1]) #结果: [1, 9, 25] |
双层 for 循环
我们也可以用双层 for 循环来处理数据。
1 2 3 4 |
print([m + n for m in 'bruce' for n in 'pk']) #结果: ['bp', 'bk', 'rp', 'rk', 'up', 'uk', 'cp', 'ck', 'ep', 'ek'] |
三层和三层以上的 for 循环很少用到了。
处理数据
以上都是生产新的列表数据,对已经存在的列表进行处理也可以用列表生成式。
比如把 list 列表中的所有字符创都变成大写。
1 2 3 4 5 |
L = ['hello', 'bruce', 'pk'] print([i.upper() for i in L]) #结果: ['HELLO', 'BRUCE', 'PK'] |
还可以提取字典中 key 和 value 值。
我们先用 for 循环实现。
1 2 3 4 5 6 7 8 |
d = {'B': '百度', 'A': '阿里', 'T': '腾讯'} for k, v in d.items(): print(k + '=' + v) #结果: B=百度 A=阿里 T=腾讯 |
列表生成式也可以使用两个变量来生成 list。
1 2 3 4 5 |
d = {'B': '百度', 'A': '阿里', 'T': '腾讯'} print([k + '=' + v for k, v in d.items()]) #结果: ['B=百度', 'A=阿里', 'T=腾讯'] |
写在最后
感谢你能看到这里,希望我写的东西能够让你有到收获,但是我还是希望我在文章里插入的代码,你们能自己动手试一下,都很简单。原创不易,每一个字,每一个标点都是自己手敲的,所以希望大家能多给点支持,该关注关注,该点赞点赞,该转发转发,有什么问题欢迎在后台联系我。