一.什么是推导式
Python 中的推导式是利用简洁的语法从一个已有的列表(或任何可迭代的对象)推导出一个新列表的一种构建方式。除了列表推导式之外,Python 还支持集合(set)推导式,字典(dict)推导式和生成器推导式。
二.推导式的优点
1.代码更加简洁
使用推导式可以用一行代码代替典型的多行循环语句,使代码看起来更加干净和优雅。
2.可读性更强
对于熟悉推导式的 Python 的人而言,推导式的结构使得目的更加一目了然,有助于快速理解代码要做什么。
3.执行效率更高
推导式通常比相应的for循环更加高效。在 Python 内部,推导式的执行过程进行了优化,执行速度往往比手动循环快。
4.内置的过滤功能
在推导式中,可以很容易地使用 if 语句来过滤想要的元素,这使得在构建新的列表、集合或字典时不需要写额外的条件判断代码。
5.灵活性和通用性
列表、集合、字典以及生成器推导式使得同一结构的数据转换变得非常方便,这四种推导式几乎可以用在任何序列构建的场合。
6.易于结合使用
推导式可以相互嵌套,比如在列表推导式中使用字典推导式,或是在集合推导式中使用列表推导式等等,使得复杂数据结构的生成更为直观。
7.动态数据生成
对于生成器推导式,它们支持惰性计算(只有在用到的时候才会处理),适合处理大数据集,因为它们不需要在内存中存储整个数据集,而是按需生成数据。
三.推导式的类型
1.列表推导式
列表推导式是最常见的推导式,它提供了构造列表的快捷方式,使代码更加简洁明了。基本语法结构如下:
[expression for item in iterable if condition]
这里的expression是列表推导式的核心,表示新列表中的元素,可以是对item的操作;item是从iterable中取出的元素;if condition是可选的,用于筛选满足条件的元素。
例子:
创建一个列表,包含0到9的平方。
# coding=utf-8
'''
@Author : TesterRoad
@Time : 2024/4/14
@Desc : 列表推导式:创建一个列表,包含0到9的平方
@Software: PyCharm
'''
squares = [x**2 for x in range(10)]
print(squares)
# 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
提取一个字符串列表中长度大于2的字符串。
# coding=utf-8
'''
@Author : TesterRoad
@Time : 2024/4/14
@Desc : 列表推导式:提取一个字符串列表中长度大于2的字符串
@Software: PyCharm
'''
words = ['hello', 'my', 'name', 'is', 'TesterRoad']
long_words = [word for word in words if len(word) > 2]
print(long_words)
# 输出: ['hello', 'name', 'TesterRoad']
2.集合推导式
集合推导式适用于创建集合(不重复元素的集合),遵循的基本格式与列表推导式类似,但使用的是花括号。
{expression for item in iterable if condition}
例子:
创建一个集合,包含0到9的平方,自动去重。
# coding=utf-8
'''
@Author : TesterRoad
@Time : 2024/4/14
@Desc : 集合推导式:创建一个集合,包含0到9的平方,自动去重
@Software: PyCharm
'''
squares = {x**2 for x in range(-9, 10)}
print(squares)
# 输出: {64, 1, 0, 36, 4, 9, 16, 81, 49, 25}
从两个字符串中提取共有的字符。
# coding=utf-8
'''
@Author : TesterRoad
@Time : 2024/4/14
@Desc : 集合推导式:从两个字符串中提取共有的字符
@Software: PyCharm
'''
a = "TesterRoad"
b = "derivation"
common_letters = {char for char in a if char in b}
print(common_letters)
# 输出: {'d', 'e', 't', 'o', 'a', 'r'}
3.字典推导式
字典推导式用于创建字典,其基本格式如下:
{key_expression: value_expression for item in iterable if condition}
其中,key_expression代表字典键的表达式,value_expression代表字典值的表达式。
例子:
将一个字符串列表转换为一个字典,其中列表项为键,其长度为值。
# coding=utf-8
'''
@Author : TesterRoad
@Time : 2024/4/14
@Desc : 字典推导式:将一个字符串列表转换为一个字典,其中列表项为键,其长度为值
@Software: PyCharm
'''
words = ['hello', 'my', 'name', 'is', 'TesterRoad']
word_lengths = {word: len(word) for word in words}
print(word_lengths)
# 输出: {'hello': 5, 'my': 2, 'name': 4, 'is': 2, 'TesterRoad': 10}
翻转字典的键和值。
# coding=utf-8
'''
@Author : TesterRoad
@Time : 2024/4/14
@Desc : 字典推导式:翻转字典的键和值
@Software: PyCharm
'''
original_dict = {'name': "TesterRoad", 'age': 18, 'tel': 1234567890}
inverted_dict = {value: key for key, value in original_dict.items()}
print(inverted_dict)
# 输出: {'TesterRoad': 'name', 18: 'age', 1234567890: 'tel'}
4.生成器推导式
生成器推导式是一种特殊的推导式,用于创建生成器对象。生成器推导式的语法如下:
(expression for item in iterable)
在生成器推导式中,expression 是对可迭代对象中每个元素应用的表达式,item 是迭代过程中的变量,iterable 是可迭代对象。生成器推导式会根据迭代过程逐个生成元素,而不是一次性创建所有元素,这使得生成器非常适合处理大型数据集或无限序列。
例子:如何使用生成器推导式创建一个生成器来生成奇数的平方。
# coding=utf-8
'''
@Author : TesterRoad
@Time : 2024/4/14
@Desc : 生成器推导式:如何使用生成器推导式创建一个生成器来生成奇数的平方
@Software: PyCharm
'''
odd_squares = (x**2 for x in range(10) if x % 2 != 0)
# 迭代生成器以获取元素
for number in odd_squares:
print(number) # 输出 1、9、25、49、81
四.注意
使用推导式可以使得代码不仅更加简洁,还能提高编写效率,同时也容易阅读理解。
不过,当推导式变得过于复杂时,它们可能会变得难以理解,所以在这种情况下可能需要考虑进行拆分或者使用传统的循环结构。
在数据量非常庞大时,可能还需要考虑推导式带来的内存影响,这时候生成器表达式会是一个更好的选择。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末小卡片领取】
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!