本章引言
有时候一些普遍的设计模式应用得非常广泛,慢慢的就形成了一种语法,或者叫 语法糖,Python 中的列表推导式 就是其中的典型代表。列表推导式是一种可以让代码更简洁,并且可以增加可读性和执行效率的方法,但是要掌握好这个语法则有些难。下面让我们一起来学习推导式吧。
基本概念
推导式(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。共有三种推导
-
列表(list)推导式
-
字典(dict)推导式
-
集合(set)推导式
列表推导式
概念
列表解析式是将一个列表(实际上适用于任何可迭代对象)转换成另一个列表的工具。并且在转换过程中,可以指定元素必须符合一定的条件,才能添加至新的列表中,这样每个元素都可以按需要进行转换。
基本语法
new_list = [expression(i) for i in old_list if condition(i)]
与之对应的for 循环就是:
new_list = []
for i in old_list:
if (condition):
new_list.append(expression(i))
示例
>>> x = [i for i in range(10)]
# 对每个元素求平方
>>> print([i**2 for i in x])
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 每个元素乘以 3
>>> print([i*3 for i in x])
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
# 获取其中的偶数
>>> print([i for i in x if i%2==0])
[0, 2, 4, 6, 8]
字典推导式
字典推导和列表推导的使用方法是类似的,只不中括号该改成大括号。
基本语法
{key:value for key:value in 可迭代对象]}
示例
需求:声明一个字典实现字典的键值调换,使用字典推导式完成
dict1={"name":"woodprogramming","age":10}
dict2={value:key for key,value in dict1.items()}
print(dict2)
集合推导式
集合推导式和列表推导式极其相似,用法也完全一样,唯一的区别就在于将代表列表的符号[ ]替换成代表几个的符号{ }。
list1 = [-5, -2, 0, 2, 5] #创建一个列表
#筛选出list1列表中所有大于0的元素,结果为列表
print([number for number in list1 if number > 0]) #[2, 5]
#筛选出list1列表中所有大于0的元素,结果为集合
print({number for number in list1 if number > 0}) #{2, 5}
#对list1列表每个元素求绝对值,结果为列表
print([abs(number) for number in list1]) #[5, 2, 0, 2, 5]
#对list1列表每个元素求绝对值,结果为集合
print({abs(number) for number in list1}) #{0, 2, 5} 注意此处的集合自动去重
练一练
1.使用列表推导式完成,从控制台输入一个数,从0到该数之间的素数
参考答案:
su=[i for i in range(2,int(input("请输入一个数:"))) if 0 not in [i%j for j in range(2,i-1)]]
print(su)
2.使用推导式完成九九乘法表的输出
参考答案:
print('\n'.join([' '.join(['%2d *%2d = %2d' % (col, row, col * row) for col in range(1, row + 1)]) for row in range(1, 10)]))
需要了解更多可关注以下公众号,每日更新一篇测试开发文章