【Python】进阶学习:列表推导式如何使用两个for循环
🌈 个人主页:高斯小哥
🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)
🌵文章目录🌵
- 🚀一、引言
- 🔍二、一个for循环的列表推导式
- 🔄三、两个for循环的列表推导式
- 🌈四、列表推导式的嵌套循环与普通循环的对比
- 🎯五、列表推导式中的条件表达式
- 🔀六、举一反三:更多应用场景
- 生成字典列表
- 生成字符串列表
- 生成列表的列表(二维列表)
- 使用列表推导式进行数值计算
- 📚七、总结与收获
🚀一、引言
Python的列表推导式(List Comprehension)是一种强大而简洁的工具,它可以用来创建列表。通常,我们可能只使用一个for循环来创建列表,但Python也允许我们在列表推导式中使用两个或更多的for循环。本文将通过通俗易懂的方式,讲解如何在列表推导式中使用两个for循环,并通过实例举一反三,让你看完受益良多。
🔍二、一个for循环的列表推导式
在开始讨论两个for循环的列表推导式之前,我们先回顾一下一个for循环的列表推导式。其基本语法如下:
[expression for item in iterable]
这里的expression
是对item
的某种操作,item
是从iterable
(可迭代对象,如列表、元组、集合、字符串、字典等)中取出的每个元素。
举个例子,假设我们有一个数字列表,想要生成一个新列表,其中的元素是原列表中每个数字的平方:
numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
print(squares) # 输出: [1, 4, 9, 16, 25]
🔄三、两个for循环的列表推导式
现在,我们来看如何使用两个for循环在列表推导式中。其基本语法如下:
[expression for item1 in iterable1 for item2 in iterable2]
这种结构会首先遍历iterable1
中的每一个item1
,然后对于每一个item1
,它都会遍历iterable2
中的每一个item2
。expression
则是对item1
和item2
的某种操作。
假设我们有两个列表,一个是颜色列表,另一个是大小列表。我们想要生成一个新的列表,其中的元素是每种颜色和大小的组合:
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']
# 使用两个for循环的列表推导式
combinations = [(color, size) for color in colors for size in sizes]
print(combinations) # 输出: [('red', 'small'), ('red', 'medium'), ('red', 'large'), ('green', 'small'), ('green', 'medium'), ('green', 'large'), ('blue', 'small'), ('blue', 'medium'), ('blue', 'large')]
这个列表推导式会首先遍历colors
列表中的每个颜色,然后在内部循环中遍历sizes
列表中的每个大小,生成一个元组(color, size)
,并添加到新列表中。
🌈四、列表推导式的嵌套循环与普通循环的对比
为了更好地理解列表推导式中的嵌套循环,我们可以将其与普通的嵌套循环进行比较。以下是一个普通嵌套循环的例子,它实现了与上面列表推导式相同的功能:
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']
combinations_normal = []
for color in colors:
for size in sizes:
combinations_normal.append((color, size))
print(combinations_normal) # 输出与列表推导式相同
虽然这两种方式都能达到同样的效果,但列表推导式的语法更简洁,更易于阅读和理解。
🎯五、列表推导式中的条件表达式
除了基本的操作外,我们还可以在列表推导式中加入条件表达式,进一步筛选结果。条件表达式使用if
关键字,并放在for循环之后。
假设我们只想获取大小为’medium’的颜色组合:
colors = ['red', 'green', 'blue']
sizes = ['small', 'medium', 'large']
medium_combinations = [(color, size) for color in colors for size in sizes if size == 'medium']
print(medium_combinations) # 输出: [('red', 'medium'), ('green', 'medium'), ('blue', 'medium')]
这里,if size == 'medium'
是一个条件表达式,它确保只有当size
为’medium’时,对应的(color, size)
元组才会被添加到新列表中。
🔀六、举一反三:更多应用场景
列表推导式不仅限于生成元组列表,它还可以用来生成任何类型的列表,包括数字列表、字符串列表、字典列表等。下面再举几个例子:
生成字典列表
keys = ['a', 'b', 'c']
values = [1, 2, 3]
# 使用zip函数和列表推导式生成字典列表
dict_list = [{k: v} for k, v in zip(keys, values)]
print(dict_list) # 输出: [{'a': 1}, {'b': 2}, {'c': 3}]
生成字符串列表
words = ['hello', 'world', 'python']
# 将每个单词转换为大写,并生成字符串列表
uppercase_words = [word.upper() for word in words]
print(uppercase_words) # 输出: ['HELLO', 'WORLD', 'PYTHON']
生成列表的列表(二维列表)
rows = 3
cols = 4
# 生成一个3x4的二维列表,初始值都是0
matrix = [[0 for _ in range(cols)] for _ in range(rows)]
print(matrix) # 输出: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
使用列表推导式进行数值计算
numbers = [1, 2, 3, 4, 5]
# 计算列表中每个数字的平方根(使用math库)
import math
square_roots = [math.sqrt(num) for num in numbers]
print(square_roots) # 输出: [1.0, 1.4142135623730951, 1.7320508075688772, 2.0, 2.23606797749979]
📚七、总结与收获
通过本文的学习,我们掌握了如何在Python的列表推导式中使用两个for循环,并通过实例展示了其强大的功能和灵活性。列表推导式不仅使代码更加简洁易读,而且提高了编程效率。通过举一反三的方式,我们还探索了列表推导式在更多应用场景中的使用,如生成字典列表、字符串列表、二维列表以及进行数值计算等。
在使用列表推导式时,要注意保持代码的清晰和可读性,避免过度嵌套和复杂的表达式。同时,也要善于利用条件表达式对结果进行筛选,以得到更符合需求的结果。
希望本文对你有所启发,让你在Python编程的道路上更进一步。通过不断实践和探索,你可以发现更多列表推导式的妙用,并将其应用于实际项目中,提升编程效率和代码质量。