发布于 1年前

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]
©2020 edoou.com   京ICP备16001874号-3