列表推导式是 Python 中一个非常强大且简洁的特性,可以让你快速创建列表。今天我们不仅会复习基础的列表推导式,还会结合 lambda
函数和 map()
函数,让你的代码更加高效和优雅。
1. 基础列表推导式
先来回顾一下基础的列表推导式。假设我们有一个列表,我们想生成一个新的列表,其中包含原列表中每个元素的平方:
numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares) # 输出: [1, 4, 9, 16, 25]
这里,[x**2 for x in numbers]
就是一个列表推导式,它遍历 numbers
列表中的每个元素 x
,并计算 x**2
,最终将结果存储在一个新的列表中。
2. 条件过滤
列表推导式还可以结合条件过滤。例如,我们只想要偶数的平方:
numbers = [1, 2, 3, 4, 5]
even_squares = [x**2 for x in numbers if x % 2 == 0]
print(even_squares) # 输出: [4, 16]
这里,if x % 2 == 0
是一个条件过滤器,只有满足条件的元素才会被处理并加入新列表。
3. 结合 lambda
函数
lambda
函数是一种匿名函数,可以在一行内定义简单的函数。我们可以结合 lambda
函数和列表推导式来简化代码。例如,我们想将一个列表中的每个元素转换为字符串:
numbers = [1, 2, 3, 4, 5]
str_numbers = [str(x) for x in numbers]
print(str_numbers) # 输出: ['1', '2', '3', '4', '5']
使用 lambda
函数可以这样写:
numbers = [1, 2, 3, 4, 5]
str_numbers = list(map(lambda x: str(x), numbers))
print(str_numbers) # 输出: ['1', '2', '3', '4', '5']
4. 结合 map()
函数
map()
函数可以将一个函数应用到一个可迭代对象的每一个元素上,并返回一个迭代器。我们可以结合 map()
函数和列表推导式来处理更复杂的操作。例如,我们想将一个列表中的每个元素乘以 2,然后再加 1:
numbers = [1, 2, 3, 4, 5]
transformed = [(x * 2) + 1 for x in numbers]
print(transformed) # 输出: [3, 5, 7, 9, 11]
使用 map()
函数可以这样写:
numbers = [1, 2, 3, 4, 5]
transformed = list(map(lambda x: (x * 2) + 1, numbers))
print(transformed) # 输出: [3, 5, 7, 9, 11]
5. 多个列表的组合
列表推导式还可以处理多个列表的组合。例如,我们有两个列表,分别表示两个集合,我们想生成一个包含所有可能组合的新列表:
list1 = [1, 2, 3]
list2 = ['a', 'b']
combinations = [(x, y) for x in list1 for y in list2]
print(combinations) # 输出: [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b')]
6. 高级技巧:嵌套列表推导式
嵌套列表推导式可以处理更复杂的数据结构。例如,我们有一个二维列表,我们想将其展平为一维列表:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
7. 实战案例:文本处理
假设我们有一个包含多个句子的列表,我们想将每个句子中的单词提取出来,并生成一个包含所有单词的列表:
sentences = ["Hello world", "Python is great", "I love coding"]
words = [word for sentence in sentences for word in sentence.split()]
print(words) # 输出: ['Hello', 'world', 'Python', 'is', 'great', 'I', 'love', 'coding']
这里,sentence.split()
将每个句子拆分为单词列表,然后 for word in sentence.split()
遍历每个单词并将其添加到新列表中。
总结
今天我们一起学习了 Python 列表推导式的进阶用法,包括如何结合 lambda
函数和 map()
函数来简化代码。我们还探讨了如何处理多个列表的组合和嵌套列表推导式。最后,我们通过一个实战案例展示了如何使用列表推导式进行文本处理。
好了,今天的分享就到这里了,我们下期见。如果本文对你有帮助,请动动你可爱的小手指点赞、转发、在看吧!
付费合集推荐
文末福利
公众号消息窗口回复“编程资料”,获取Python编程、人工智能、爬虫等100+本精品电子书。