Python3 列表推导(List Comprehensions)

译者:anxin
日期:2018-06-19

Python3 列表推导(List Comprehensions)就是从一个已有的列表构造一个新的列表,列表推导构造新列表的过程是:遍历已有列表中的每一个元素,如果元素满足特定的条件,则把此元素按照表达式计算后添加到新列表中,直到已有列表遍历结束。

Python3 列表推导语法形式

列表推导包含以下几部分:

  • for 循环语句,用于遍历已有列表中的元素
  • 可选的嵌套 for 循环语句,用于遍历另一个已有的列表中的元素
  • 可选的条件语句,用于判断已有列表中的元素是否满足一定条件
  • 输出表达式,用于对已有列表中满足条件的元素,按照表达式进行计算,把结果添加到新列表中

根据列表推导需要包含的几个部分,列表推导有四种形式:

  • 最简单的形式,只包含输出表达式和 for 循环语句的列表推导
  • 包含条件语句的列表推导
  • 包含嵌套 for 循环语句的列表推导
  • 包含嵌套 for 循环语句和 if 条件语句的列表推导

Python3 四种列表推导形式详细解释

1)最简单的列表推导形式,只包含输出表达式和 for 循环语句,形式如下:

Python 3 列表推导简单形式

此种列表推导的简单实例如下:

#!/usr/bin/env python3

lst_1 = [1, 2, 3]
lst_2 = [e*2 for e in lst_1]
print(lst_2)

输出的结果是:

[2, 4, 6]

此种形式的列表推导构造新列表的过程是:遍历已有列表中的每一个元素,把元素乘 2 得到的结果添加到新列表的最后位置,直到已有列表遍历结束。

2)包含条件语句的列表推导,形式如下:

Python 3 列表推导包含 if 语句

此种列表推导的简单实例如下(lst_1 中包含了一个字符串元素):

#!/usr/bin/env python3

lst_1 = [1, 2, 3, 'a']
lst_2 = [e*2 for e in lst_1 if type(e) is int]
print(lst_2)

输出的结果是:

[2, 4, 6]

此种形式的列表推导构造新列表的过程是:遍历已有列表中的每一个元素,如果元素是整数类型,就把元素乘 2 得到的结果添加到新列表的最后位置,直到已有列表遍历结束。

3)包含嵌套 for 循环语句的列表推导,形式如下:

Python 3 列表推导包含嵌套 for 语句

此种列表推导的简单实例如下:

#!/usr/bin/env python3

lst_1 = [1, 2, 3]
lst_2 = [4, 5]
lst = [e*i for e in lst_1 for i in lst_2]
print(lst)

输出的结果是:

[4, 5, 8, 10, 12, 15]

此种形式的列表推导构造新列表的过程是:遍历 lst_1 列表中的每一个元素,在遍历 lst_1 中一个元素时,遍历一遍 lst_2 中的所有元素,在遍历 lst_2 中每一个元素时,把当前遍历的 lst_1lst_2 中的元素相乘得到的结果添加到新列表的最后位置,直到两个列表遍历结束。

4)包含嵌套 for 循环语句和 if 条件语句的列表推导,形式如下:

Python3 列表推导包含嵌套 for 和 if 语句

此种列表推导的简单实例如下:

#!/usr/bin/env python3

lst_1 = [1, 2, 3, 'a']
lst_2 = [4, 5]
lst = [e*i for e in lst_1 for i in lst_2 if type(e) is int]
print(lst)

输出的结果是:

[4, 5, 8, 10, 12, 15]

此种形式的列表推导构造新列表的过程是:遍历 lst_1 列表中的每一个元素,在遍历 lst_1 中一个元素时,遍历一遍 lst_2 中的所有元素,在遍历 lst_2 中每一个元素时,如果当前遍历的 lst_1 中的元素是整数,把当前遍历的 lst_1lst_2 中的元素相乘得到的结果添加到新列表的最后位置,直到两个列表遍历结束。

本文链接:/tutorial/python3/python3-liebiao-tuidao-comprehensions

本文版权归知站所有,未经站长同意不得转载,谢谢尊重作者劳动成果!