Python“语法糖”——列表解析式(List Comprehension)
1. 前言
最近在利用Python学习网络爬虫,由于之前一直使用C++编程,因此对于Python特有的一些语法知识不是很熟,比如今天要写到的列表解析式就让我很费解,好在经过查阅资料,总算明白了该语法。
此外,列表解析是一种“语法糖”,编译器会优化,不会因为简写而影响效率,反而优化提升效率;减少代码量,可读性强,工作量降低,减少出错…
2. 语法
(1)基本语法
[ 返回值 for 元素 in 可迭代对象 if 条件 ]
其中:“[ ]”内固有的是 for 循环,if 条件语句可选;
返回值:返回一个列表。
(2)进阶语法
[表达式 for 元素 in 迭代对象1 if 条件语句1 if 条件语句2]
与其等价的Python自然语句为:
res = []
for 元素 in 迭代对象1:
if 条件语句1:
if 条件语句2:
res.append(表达式)
示例:
实现:20以内能被2整除又能被3整除的数
[i for i in range(20) if i%2==0 and i%3==0]
or
[i for i in range(20) if i%2==0 if i%3==0]
(3)多层循环
[表达式 for 元素1 in 迭代对象1 for 元素2 in 迭代对象2]
与其等价的Python自然语句为:
res = []
for 元素1 in 迭代对象1:
for 元素2 in 迭代对象2:
res.append(表达式)
示例:
[(x,y) for x in 'abcde' for y in range(3)]
[(x,y) for x in 'abcde' for y in range(3)]
[(x,y) for x in 'abcde' for y in range(3)]