Python 的列表推导式(List Comprehension)是一种简洁且强大的生成列表的方式,它使得代码更加简洁和可读。列表推导式通过一种简明的语法来创建和操作列表,通常比使用循环生成列表更为优雅。
基本语法
列表推导式的基本语法如下:
[expression for item in iterable if condition]
expression
:生成新列表中的元素,可以是对item
的某种操作。item
:从iterable
中取出的元素。iterable
:可以是任何可迭代对象,如列表、元组、字符串、range 等。condition
:可选的条件,只有满足该条件的元素才会被加入新列表中。
示例
创建一个简单的列表
使用列表推导式生成一个包含前10个整数的列表:
numbers = [i for i in range(10)]
print(numbers) # 输出: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
带条件的列表推导式
生成一个包含前10个整数中偶数的列表:
even_numbers = [i for i in range(10) if i % 2 == 0]
print(even_numbers) # 输出: [0, 2, 4, 6, 8]
生成平方数列表
生成一个包含前10个整数的平方的列表:
squares = [i ** 2 for i in range(10)]
print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
嵌套循环的列表推导式
生成一个 3x3 矩阵的所有元素组合:
combinations = [(x, y) for x in range(3) for y in range(3)]
print(combinations)
# 输出: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
处理嵌套列表
给定一个嵌套列表,生成一个包含所有元素的平面列表:
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat_list = [item for sublist in nested_list for item in sublist]
print(flat_list) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
带有函数的列表推导式
将一个字符串列表中的每个字符串转换为大写:
words = ['hello', 'world', 'python']
upper_words = [word.upper() for word in words]
print(upper_words) # 输出: ['HELLO', 'WORLD', 'PYTHON']
其他推导式
除了列表推导式,Python 还支持集合推导式、字典推导式和生成器表达式。
集合推导式
生成一个包含前10个整数平方的集合(去除重复元素):
squares_set = {i ** 2 for i in range(10)}
print(squares_set)
# 输出: {0, 1, 64, 36, 4, 9, 16, 49, 81, 25}
字典推导式
生成一个字典,其中键是前10个整数,值是它们的平方:
squares_dict = {i: i ** 2 for i in range(10)}
print(squares_dict)
# 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
生成器表达式
生成器表达式类似于列表推导式,但返回的是一个生成器对象,而不是一个列表。生成器表达式使用圆括号 ()
而不是方括号 []
。
squares_gen = (i ** 2 for i in range(10))
print(squares_gen) # 输出: <generator object <genexpr> at 0x...>
print(list(squares_gen)) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
总结
列表推导式是 Python 中一种简洁而强大的生成列表的方式。它不仅提高了代码的可读性,还简化了代码的书写。通过熟练掌握列表推导式,可以编写出更加优雅和高效的 Python 代码。