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]