Python列表推导式的10个高级技巧
作为Python开发者,列表推导式是我日常编码中最常用的特性之一。它不仅让代码更简洁,还能提高执行效率。今天我想分享一些列表推导式的高级技巧,帮助你写出更优雅、更高效的Python代码。
1. 嵌套列表推导式
嵌套列表推导式可以用来处理多维数据结构:
1 2 3
| matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flattened = [num for row in matrix for num in row]
|
2. 条件过滤
在列表推导式中使用条件语句过滤元素:
1 2 3
| numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] even_numbers = [x for x in numbers if x % 2 == 0]
|
3. 条件表达式(三元运算符)
在列表推导式中使用条件表达式进行转换:
1 2 3
| numbers = [1, 2, 3, 4, 5] result = ["偶数" if x % 2 == 0 else "奇数" for x in numbers]
|
4. 集合和字典推导式
类似的语法也适用于创建集合和字典:
1 2 3 4 5 6 7
| unique_squares = {x**2 for x in range(10)}
square_dict = {x: x**2 for x in range(5)}
|
5. 使用zip合并多个列表
1 2 3 4
| names = ['Alice', 'Bob', 'Charlie'] ages = [25, 30, 35] people = [(name, age) for name, age in zip(names, ages)]
|
6. 生成器表达式节省内存
对于大型数据集,使用生成器表达式可以节省内存:
1 2 3 4 5
| sum_squares_list = sum([x**2 for x in range(1000000)])
sum_squares_gen = sum(x**2 for x in range(1000000))
|
7. 处理嵌套结构
处理JSON等嵌套数据结构:
1 2 3 4 5 6 7 8
| data = [ {'name': 'Alice', 'skills': ['Python', 'SQL']}, {'name': 'Bob', 'skills': ['Java', 'C++', 'Python']}, {'name': 'Charlie', 'skills': ['JavaScript', 'HTML']} ]
python_users = [person['name'] for person in data if 'Python' in person['skills']]
|
8. 使用enumerate获取索引
1 2 3
| fruits = ['apple', 'banana', 'cherry'] indexed_fruits = [f"{i}: {fruit}" for i, fruit in enumerate(fruits, 1)]
|
9. 列表推导式中的函数调用
1 2 3 4 5
| import re
texts = ["hello world", "python is great", "coding in python"] word_counts = [len(re.findall(r'\w+', text)) for text in texts]
|
10. 多重条件过滤
1 2 3
| numbers = list(range(1, 101)) filtered = [x for x in numbers if x % 3 == 0 and x % 5 == 0]
|
性能考虑
列表推导式通常比等效的for循环快,但并不总是最佳选择。对于非常复杂的操作,传统的for循环可能更易读和维护。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import timeit
list_comp_time = timeit.timeit('[x**2 for x in range(1000)]', number=10000)
loop_time = timeit.timeit( ''' result = [] for x in range(1000): result.append(x**2) ''', number=10000 )
print(f"列表推导式: {list_comp_time:.6f}秒") print(f"For循环: {loop_time:.6f}秒")
|
结论
列表推导式是Python中非常强大的特性,掌握这些技巧可以让你的代码更加简洁、高效。但也要记住,代码的可读性同样重要,不要为了使用列表推导式而牺牲代码的清晰度。
希望这些技巧对你有所帮助!你有什么常用的列表推导式技巧吗?欢迎在评论区分享。