Python列表生成式(List Comprehensions) - 基于中括号的语法糖
Python的列表生成式(List Comprehensions)是一个用来生成列表的语法糖的表达式。是一种简洁直观的形式表示列表的生成。
语法主要分为两种:
- 基础格式:[expression for iter_val in iterable]
- 带过滤条件格式:[expression for iter_val in iterable if cond_expr]
一、语法
基础语法格式
[expression for iter_val in iterable]
说明
for iter_var in iterable
迭代iterable中的元素,每次迭代把值赋予给iter_val变量expression
使用iter_val的值进行计算,得到新的结果- 语法糖中括号[]把expression计算的新值,构成一个新列表
等同于:
array = []
for iter_val in iterable:
array.append(expression)
带过滤条件的语法格式
[expression for iter_val in iterable if cond_expr]
说明
在基础语法后面添加了if cond_expr
用于过滤:
for iter_var in iterable
迭代iterable中的元素,每次迭代先判断cond_expr
表达式结果为True,如果为True则继续运算,否则跳到下一次迭代;expression
使用iter_val的值进行计算,得到新的结果- 语法糖中括号[]把expression计算的新值,构成一个新列表
等同于:
array = []
for iter_val in iterable:
if cond_expr:
array.append(expression)
二、举例
基础示例
1. 计算列表的n+1后的结果
# 不使用列表生成式实现
list = []
for n in range(1, 10):
list.append(n + 1)
# 使用列表生成式实现
[n + 1 for n in range(1, 10)]
2. 两层循环,生成全排列
# 不使用列表生成式实现
list = []
for m in ‘ABC’:
for n in ‘XYZ’:
list.append(m+n)
# 使用列表生成式实现
[m + n for m in 'ABC' for n in 'XYZ']
#全排列结果为:['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
过滤条件示例
#不使用列表生成式实现
list = []
for i in range(1,10):
if i**2 > 50:
list.append(i**2)
# 使用列表生成式实现
[i**2 for i in range(1,10) if i**2 >50]