Python中的列表推导式是一种方便快捷的语法,可以快速地生成列表。它的语法形式类似于数学中的集合推导式,语义也相似,因而易于理解和使用。下面将详细介绍Python中的列表推导式。
一、基本语法结构
列表推导式的基本语法结构为:
[ expression for item in iterable if condition ]
其中,expression表示参与列表生成的表达式,可包含变量、函数调用等操作;item表示生成列表中的元素;iterable表示可迭代的对象,例如列表、元组、集合等;if condition表示对条件的筛选,可以省略。
二、常见使用场景
1.生成整数列表
例如,生成1~10之间的整数列表可以使用以下代码:
num_list = [i for i in range(1,11)] print(num_list)
输出结果为:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
此处使用range()函数生成一个1~10之间的整数迭代器,然后通过列表推导式将其中的元素逐一提取,并构成一个列表。
2.生成平方列表
例如,生成1~10之间的整数的平方列表可以使用以下代码:
square_list = [i**2 for i in range(1,11)] print(square_list)
输出结果为:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3.过滤列表元素
例如,从一个字符串列表中筛选出长度超过3的字符串可以使用以下代码:
str_list = ['hello', 'world', 'python', 'list', 'comprehension', 'study'] new_list = [s for s in str_list if len(s) > 3] print(new_list)
输出结果为:
['hello', 'world', 'python', 'comprehension', 'study']
此处使用if语句对元素进行条件筛选,只有长度大于3的字符串才能进入新的列表中。
4.多重循环
例如,生成1~9之间的所有乘积可以使用以下代码:
mul_list = [i*j for i in range(1,4) for j in range(1,4)] print(mul_list)
输出结果为:
[1, 2, 3, 2, 4, 6, 3, 6, 9]
此处通过两层循环实现了乘法操作,即i和j分别取1、2、3时,它们的乘积构成了列表中的元素。
三、嵌套列表推导式
有时候需要在生成一个列表时,对其中的元素进行更加复杂的操作,此时就可以使用嵌套列表推导式。嵌套列表推导式即在列表推导式的基础上再次嵌套列表推导式,其语法结构为:
[ expression for item in iterable if condition for sub_item in sub_iterable if sub_condition ]
其中,expression、item、iterable和condition的含义与上述基本语法结构中一致;sub_item表示在item遍历的基础上再次遍历的元素;sub_iterable表示sub_item的迭代对象;sub_condition表示对sub_item的筛选条件。
以下是几个常见的嵌套列表推导式的例子。
1.生成平方矩阵
例如,生成3×3的平方矩阵可以使用以下代码:
matrix = [[i*j for j in range(1,4)] for i in range(1,4)] for row in matrix: print(row)
输出结果为:
[1, 2, 3] [2, 4, 6] [3, 6, 9]
此处使用两层嵌套推导式,外层推导式生成三个列表,内层推导式生成每个列表中的三个元素,从而构成了一个3×3的平方矩阵。
2.筛选奇偶数
例如,从一个整数列表中筛选出奇数和偶数分别构成两个列表可以使用以下代码:
num_list = [1,2,3,4,5,6,7,8,9,10] odd_list = [i for i in num_list if i%2 == 1] even_list = [i for i in num_list if i%2 == 0] print(odd_list) print(even_list)
输出结果分别为:
[1, 3, 5, 7, 9] [2, 4, 6, 8, 10]
此处使用两个嵌套的列表推导式,分别筛选出原始列表中的奇数和偶数元素。
四、总结
列表推导式是Python语言的一项优秀的语法特性之一,它可以方便地生成各种类型的列表,同时也支持嵌套等高级特性。在实际编程中,学习和使用列表推导式可以大大提高代码的编写效率和可读性。