python语法:列表解析式
列表解析式(List Comprehension)是Python的一种简洁且强大的语法,用于创建新的列表。它通过在一个表达式中嵌入循环和条件语句,从而避免了使用显式循环来生成列表,使代码更简洁和易读。

基本语法
列表解析式的基本语法如下:

[expression for item in iterable if condition]
expression:生成列表元素的表达式。
item:从 iterable 中取出的每个元素。
iterable:一个可迭代对象(如列表、元组、字符串等)。
condition(可选):一个过滤条件,只有满足该条件的元素才会包含在生成的列表中。
示例

让我们通过几个示例来说明列表解析式的使用。

示例1:生成一个平方数列表
假设我们想生成一个包含前10个自然数平方的列表,可以使用列表解析式如下:

 

1
2
squares = [x**2 for x in range(10)]
print(squares)
 输出: 

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
示例2:过滤条件
我们可以在列表解析式中加入条件,以过滤出满足特定条件的元素。假设我们想生成一个包含前10个自然数中偶数的平方的列表,可以使用列表解析式如下:

1
2
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)
  输出:

1
[0, 4, 16, 36, 64]
  

示例3:嵌套循环
列表解析式还支持嵌套循环。假设我们想生成一个二维列表,其中每个元素是两个数的乘积,可以使用嵌套列表解析式如下:

multiplication_table = [[x * y for y in range(1, 5)] for x in range(1, 5)]
print(multiplication_table)
输出:

[[1, 2, 3, 4], [2, 4, 6, 8], [3, 6, 9, 12], [4, 8, 12, 16]]
示例4:处理复杂对象
列表解析式不仅适用于简单的数据类型,也可以用于处理复杂的对象。假设我们有一个包含多个字典的列表,每个字典表示一个人的信息,我们想提取出所有年龄大于30的人的名字,可以使用列表解析式如下:

复制代码
people = [
    {'name': 'Alice', 'age': 25},
    {'name': 'Bob', 'age': 35},
    {'name': 'Charlie', 'age': 30},
    {'name': 'David', 'age': 40}
]

names = [person['name'] for person in people if person['age'] > 30]
print(names)
复制代码
输出:

['Bob', 'David']
列表解析式与显式循环的对比
为了更好地理解列表解析式的优势,我们可以对比一下使用显式循环和列表解析式生成同一个列表的代码。

显式循环
squares = []
for x in range(10):
    squares.append(x**2)
print(squares)
列表解析式

squares = [x**2 for x in range(10)]
print(squares)
从上面的代码可以看到,列表解析式的代码更简洁,更容易理解。



print(list(range(0,10)))