报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

Python 推导式 pythonic 必备

  • 2020-03-04
  • 本文字数:1208 字

    阅读完需:约 4 分钟

Python推导式pythonic必备

编程规范

今天公司新出了一套 Python 编程规范 2.0,一直觉得自己写代码路子有点野,所以仔细的看了下。


多数的内容在网上都能搜到,但有几点需要说说


  • 让我觉得羞愧的注释率


公司要求代码注释行,占代码总行数的 20%,而我经常一套代码写下来注释寥寥几行。甚至在 Linux 下写代码的时候,由于系统语言包问题,pycharm 没办法打中文,经常出现通篇没有一行注释的情况…所谓,写自己的代码,让别人无处维护也就不过如此。但过了仗剑走天涯的年纪,要开始学着沉淀自己,不为别的,就为现在年轻的小伙子各个吃的好,长得壮。


  • 规避单一循环


这一点代码要求是我欣然接受的,我这人懒,能偷懒的偷懒,不能偷懒的想办法也要偷懒。这次的代码规范要求,单一辑的 for 循环,通过 Python 推导式完成,但嵌套 for 循环禁止使用。我默默的忽略后面这句,for 循环推荐 Python 推导式…


为什么喜欢推导式?因为省事儿、看这高端啊。最怕人说程序猿就是 if …else + for 循环了…

Python 推导式

今天就给大家介绍下 Python 推导式的使用


推导式(又称解析式) 是 Python 的一种独有特性。


推导式是可以从一个数据序列构建另一个新的数据序列的结构体。一共有三种推导:


  • 列表(list)推导式

  • 字典(dict)推导式

  • 集合(set)推导式


列表推导式 (list comprehensions)


列表推导式(又称列表解析式) 提供了一种简明扼要的方法来创建列表。


它的结构是在一个中括号里包含一个表达式, 然后是一个 for 语句, 然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的, 意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表, 在这个以 if 和 for 语句为上下文的表达式运行完成之后产生

规范

variable = [x for x in list if something == 2]
复制代码


这是另外一个简明例子:


multiples = [i for i in range(30) if i % 3 is 0]print(multiples)# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
复制代码


列表推导式在有些情况下超赞, 特别是当你需要使用 for 循环来生成一个新列表。举个例子, 通常一般人会这样做:


squared = []for x in range(10):    squared.append(x**2)
复制代码


你可以使用列表推导式来简化它:


squared = [x**2 for x in range(10)]
复制代码

集合推导式(set comprehensions)

至于集合推导式,跟列表推导式大同小异,不过在去重方面是 set 的强项


举个栗子:


squared = {x**2 for x in [1, 1, 2]}print(squared)# Output: {1, 4}
复制代码

字典推导式(dict comprehensions)

字典推导式,使用的场景比较少,但是有一点是超级赞的!


问题:遇到字典的键值对互换,你会怎么操作?


  1. 使用 for 循环?


mydict={"a":1,"b":2,"c":3}mydict_new={}for key,val in mydict.items():    mydict_new[val]=key
复制代码


  1. 使用 zip?


mydict={"a":1,"b":2,"c":3}newdict=dict(zip(mydict.values(),mydict.keys()))
复制代码


  1. say no,你应该使用字典推导式!


mydict={"a":1,"b":2,"c":3}newdict={v: k for k, v in some_dict.items()}ornewdict=dict([val,key] for key,val in mydict.items())
复制代码


2020-03-04 14:25938

评论

发布
暂无评论
发现更多内容

云效构建在线调试来啦!保留构建现场,高效排查构建问题

阿里巴巴云原生

阿里云 云原生

从数据洪流到智能洞察:人工智能如何解锁大数据的价值?

天津汇柏科技有限公司

人工智能 AI #大数据

解锁 DeepSeek 安全接入、稳定运行新路径

阿里巴巴云原生

深入理解Base64编码原理

秃头小帅oi

一图看懂天润融通智能体知识库

天润融通

AI口语机器人的测试流程

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语口语

自建 DeepSeek 时代已来,联网搜索如何高效实现

阿里巴巴云原生

阿里云 微服务 云原生

“RdbStore”上线开源鸿蒙社区 助力鸿蒙应用数据访问效率大幅提升

HarmonyOS开发者

【Redis技术进阶之路】「原理分析系列开篇」揭秘分析客户端和服务端网络通信交互实现(服务端篇 - 命令执行过程)

码界西柚

redis RESP Redis 协议 redis 底层原理 通信模式

从混乱到高效:企业如何利用CMDB优化资产管理与战略决策

ServiceDesk_Plus

CMDB

让海豚替你跑SQL!DolphinScheduler高效配置三步曲

白鲸开源

sql 开源 Apache DolphinScheduler

AI 与 CI/CD 双轮驱动:接口自动化测试破局之道

智在碧得

AI 技术分享 智在碧得 碧桂园

深度解析:通过 AIBrix 多节点部署 DeepSeek-R1 671B 模型

字节跳动开源

AIBrix 分布式推理 多节点部署 GPU调度 vLLM优化

单元化架构在字节跳动的落地实践

火山引擎开发者社区

【企业级文生视频】互动双语视频生成器闪亮登场 !

火山引擎开发者社区

天润融通助力德施曼,AI+工单实现末端服务全流程管理

天润融通

“RdbStore”上线开源鸿蒙社区 助力鸿蒙应用数据访问效率大幅提升

最新动态

游戏公司吐槽:业内竟然没有应对这个场景的实时数仓

AI数据云Relyt

数据仓库 实时数仓 大模型 数据分析、 分析云

拿下美团实习~

王磊

近百款媒体类SDK适配鸿蒙,覆盖音视频通话、直播点播等场景

新消费日报

昆仑万维开源R1V视觉思维链推理模型,开启多模态思考新时代

新消费日报

智能网关选择指南:软件网关与硬件网关的五大区别

Ogcloud

网关 网关软件 软件网关 硬件网关

Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手

阿里巴巴云原生

阿里云 微服务 云原生

阿里云服务器遭遇DDoS攻击有争议?

网络安全服务

CDN DDoS 阿里云服务器 高防IP DDoS 攻击

飞行中换引擎:长城汽车 toC 业务中台同城双活架构升级

火山引擎开发者社区

可观测性探索系列二:如何高效打造运维数据底座

日志易

可观测性 #运维

『Plotly实战指南』--折线图绘制基础篇

不在线第一只蜗牛

plotly

redis基本操作

不在线第一只蜗牛

数据库 redis

字节一面,面试官说自我介绍的时间太长了。。

王中阳Go

Go 面试 后端 字节

Python推导式pythonic必备_服务革新_华为云开发者联盟_InfoQ精选文章