1. 列表生成式 (List Comprehension)
语法:[expression for item in iterable if condition]
示例:
1.基本示例 # 创建平方数列表 squares = [x**2 for x in range(5)] print(squares) # [0, 1, 4, 9, 16]# 创建偶数列表 evens = [x for x in range(10) if x % 2 == 0] print(evens) # [0, 2, 4, 6, 8]
2.带条件的列表生成式 # 过滤出长度大于3的单词 words = ['apple', 'cat', 'dog', 'elephant', 'bat'] long_words = [word for word in words if len(word) > 3] print(long_words) # ['apple', 'elephant']# 处理字符串列表 names = ['alice', 'bob', 'charlie'] capitalized = [name.title() for name in names] print(capitalized) # ['Alice', 'Bob', 'Charlie']3.多重循环 # 创建坐标列表 coordinates = [(x, y) for x in range(3) for y in range(2)] print(coordinates) # [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]# 矩阵转置 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] transposed = [[row[i] for row in matrix] for i in range(3)] print(transposed) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
2. 字典生成式 (Dictionary Comprehension)
语法:{key_expression: value_expression for item in iterable if condition}
示例:
1.基本示例
# 创建数字平方字典
squares_dict = {x: x**2 for x in range(5)}
print(squares_dict) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}# 转换列表为字典
fruits = ['apple', 'banana', 'cherry']
fruit_dict = {fruit: len(fruit) for fruit in fruits}
print(fruit_dict) # {'apple': 5, 'banana': 6, 'cherry': 6}2.带条件的字典生成式
# 只保留值大于2的项
numbers = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
filtered = {k: v for k, v in numbers.items() if v > 2}
print(filtered) # {'c': 3, 'd': 4}# 键值转换
original = {'a': 1, 'b': 2, 'c': 3}
swapped = {v: k for k, v in original.items()}
print(swapped) # {1: 'a', 2: 'b', 3: 'c'}3.处理字符串
# 创建字符索引字典
text = "hello"
char_index = {char: index for index, char in enumerate(text)}
print(char_index) # {'h': 0, 'e': 1, 'l': 2, 'l': 3, 'o': 4}# 大小写转换
data = {'Name': 'Alice', 'Age': 25, 'City': 'Beijing'}
lowercase_keys = {k.lower(): v for k, v in data.items()}
print(lowercase_keys) # {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
3. 生成器表达式 (Generator Expression)
语法:(expression for item in iterable if condition)
示例
1.基本示例
# 创建生成器表达式
squares_gen = (x**2 for x in range(5))
print(squares_gen) # <generator object <genexpr> at 0x...># 使用生成器
for num in squares_gen:print(num, end=" ") # 0 1 4 9 16
print()# 生成器只能使用一次
squares_gen = (x**2 for x in range(3))
print(list(squares_gen)) # [0, 1, 4]
print(list(squares_gen)) # [] - 已经耗尽2. 处理大文件时节省内存
# 假设有一个大文件,我们想统计行数
lines = (line for line in open('large_file.txt', 'r') if 'error' in line)
error_count = sum(1 for _ in lines)
print(f"错误行数: {error_count}")3.链式处理数据
numbers = (x for x in range(10))
squared = (x**2 for x in numbers)
filtered = (x for x in squared if x % 2 == 0)
result = list(filtered)
print(result) # [0, 4, 16, 36, 64]