Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。列表、元组、字典和集合推导式是Python中快速生成数据结构的便捷方式。
列表 (list) 推导式
列表推导式用于生成列表
# 列表推导式格式
# [表达式 for 变量 in 列表]
# [out_exp_res for out_exp in input_list]
# 或者
# [表达式 for 变量 in 列表 if 条件]
# [out_exp_res for out_exp in input_list if condition]
# 生成 10 以内 数字的平方 转换字符串格式 放入 列表 l1
l1 = [str(i ** 2) for i in range(10)]
print(l1, type(l1))
<<<
['0', '1', '4', '9', '16', '25', '36', '49', '64', '81'] <class 'list'>
# 生成 10 以内 的奇数 放入 列表 l2 中
l2 = [i for i in range(10) if i % 2]
print(l2)
<<<
[1, 3, 5, 7, 9]
元组 (tuple) 推导式
元组推导式与列表推导式类似,但是使用圆括号而不是方括号,用于生成元组
# 2、元组推导式
# 得到一个生成器 可通过遍历获取 生成器 内容
# 也可通过 tuple() 函数,可以直接将生成器对象转换成元组
# (expression for item in Sequence )
# 或
# (expression for item in Sequence if conditional )
# iterable(迭代器) generator(生成器:特殊的迭代器)
g0 = (i for i in range(1, 10))
print(tuple(g0), type(tuple(g0)))
print(g0, type(g0))
# 注意,由于生成器只能被遍历一次,所以在转换为元组并打印之后,再次尝试打印生成器 g0 时
# 它将不会输出任何内容,因为生成器已经被耗尽了
# 迭代器 用尽 不会输出
for e in g0:
print(e, end='\t')
<<<
(1, 2, 3, 4, 5, 6, 7, 8, 9) <class 'tuple'>
<generator object <genexpr> at 0x0000018B42918040> <class 'generator'>
字典 (dict) 推导式
字典推导式用于生成字典
# 3、字典推导式
# { key: value for value in iterable }
# 或
# { key: value for value in iterable if condition }
# 表达式中要有 字典的 键、值 不然生成的 则是 集合
d0 = {f"key{i}": i ** 2 for i in range(10) if i % 2}
print(d0, type(d0))
<<<
{'key1': 1, 'key3': 9, 'key5': 25, 'key7': 49, 'key9': 81} <class 'dict'>
集合 (set) 推导式
集合推导式用于生成集合
# 4、集合推导式
# { expression for item in Sequence }
# 或
# { expression for item in Sequence if conditional }
a = {x for x in 'abracadabra' if x not in 'abc'}
print(a, type(a))
<<<
{'r', 'd'} <class 'set'>
Python 推导式是一种强大且简洁的语法,适用于生成列表、字典、集合和生成器。在使用推导式时,需要注意可读性,尽量保持表达式简洁,以免影响代码的可读性和可维护性。