小王在学习Python中总是对 表达式 for i in x 中“表达式”产生疑惑,索性学习记录推导式在csdn
本文章作用为记录学习小王记不住的地方,所以引用各种地方概念、分类、代码,感谢各位大佬文章的帮助
简介
推导式(又称解析式),常用于从原有数据列表创建新的数据列表
pyhton官方文档格式标准:一个表达式,后面为一个 for
子句,然后,是零个或多个 for
或 if
子句。结果是由表达式依据 for
和 if
子句求值计算而得出一个新列表。
表达式 for 变量 in 可迭代对象 if 条件表达式
分类
列表推导式(list comprehension)
使用for循环创建列表
不使用推导式进行创建列表
a = []
for x in range(5):
a.append(x)
print(a)
使用推导式进行创建列表
print([a for a in range(6)])
可以看到使用推导式使代码更为简洁、可读性更强
接下来为添加条件语句的推导式
print([a for a in range(6) if a>3])
表达式处可使用函数
y = [abs(i) for i in range(-6,6)]
print(y)
还可嵌套多个for循环
row = [[1,23,4,6],[234,5,2,5],[6,5,4,2]]
y = [[a,b] for a in range(6) for b in row]
print(y)
[[0, [1, 23, 4, 6]], [0, [234, 5, 2, 5]], [0, [6, 5, 4, 2]], [1, [1, 23, 4, 6]], [1, [234, 5, 2, 5]], [1, [6, 5, 4, 2]], [2, [1, 23, 4, 6]], [2, [234, 5, 2, 5]], [2, [6, 5, 4, 2]], [3, [1, 23, 4, 6]], [3, [234, 5, 2, 5]], [3, [6, 5, 4, 2]], [4, [1, 23, 4, 6]], [4, [234, 5, 2, 5]], [4, [6, 5, 4, 2]], [5, [1, 23, 4, 6]], [5, [234, 5, 2, 5]], [5, [6, 5, 4, 2]]]
嵌套多个推导式
martix = [[1,23,4,6],[234,5,2,5],[6,5,4,2]]
y = [[row[i] for row in martix] for i in range(3)]
print(y)
[[1, 234, 6], [23, 5, 5], [4, 2, 4]]
不使用推导式
martix = [[1,23,4,6],[234,5,2,5],[6,5,4,2]]
l = []
for i in range(3):
temp = []
for row in martix:
temp.append(row[i])
l.append(temp)
print(l)
[[1, 234, 6], [23, 5, 5], [4, 2, 4]]
通过以上例子可看出
1.多个for循环嵌套为从右向左运行
2.if判断语句将在创造新数组时添加条件
3.嵌套多个推导式与多个for循环嵌套效果一样(通过多个for循环更体现推导式从右向左运行)
集合推导式
与列表推导式类似,但是将 [] 换为 {}
此处复习一下列表与集合的区别
列表:
- 列表中的元素可以重复;
- 列表中的元素是有序排列的,可以根据索引获得对应位置的元素;
- 列表是用中括号
[]
括起来的一组数据;
集合:
- 集合中的元素是不重复的,因此可以用集合来解决冗余问题;
- 集合中的元素是没有顺序的,因此不支持元素索引;
- 集合是用大括号
{}
括起来的一组数据;
print({a for a in range(6)})
字典推导式
同样字典推导式与列表推导式思想相似
k = {'name':'小王','age':'18'}
print({k[a]:a for a in k})
{'小王': 'name', '18': 'age'}