Python学习之推导式

小王在学习Python中总是对 表达式 for i in x 中“表达式”产生疑惑,索性学习记录推导式在csdn

本文章作用为记录学习小王记不住的地方,所以引用各种地方概念、分类、代码,感谢各位大佬文章的帮助

简介

        推导式(又称解析式),常用于从原有数据列表创建新的数据列表

        pyhton官方文档格式标准:一个表达式,后面为一个 for 子句,然后,是零个或多个 forif 子句。结果是由表达式依据 forif 子句求值计算而得出一个新列表。

表达式 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'}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值