免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

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:25793

评论

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

华为云网站安全解决方案助力客户——构建风险全面可控的网站安全架构

YG科技

一文掌握 Go fmt 标准库常用方法的使用

陈明勇

Go golang 三周年连更 输入输出 fmt

基于TCP协议的Socket通信

芯动大师

TCP协议 Socket请求 三周年连更

华为云网站安全解决方案:守护企业数字化转型之路,提升业务效率与安全

YG科技

数据库、

IT分享丨我是如何利用华为云网站安全解决方案帮助中小型企业实现IT安全

YG科技

Django笔记十之values_list指定字段取值及distinct去重处理

Hunter熊

Python django distinct values

文心一言 VS chatgpt (11)-- 算法导论2.3 7题 3.1 4~5题

福大大架构师每日一题

福大大 ChatGPT 文心一言

华为云网站安全解决方案:全面保障企业网络安全,助力业务稳定高效运行

YG科技

华为云网站安全解决方案:中小型企业的云上云下安全守护专家

YG科技

HTTP事务的时延

阿泽🧸

三周年连更 HTTP时延

IPv6域名软件

穿过生命散发芬芳

ipv6 三周年连更

项目讲解之常见安全漏洞

越长大越悲伤

Java Web 安全

DAYU200关闭自动息屏的几种方式

坚果

OpenHarmony 三周年连更

2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA、Intel Quick Sync Video 等)对视频进行解码,从而提高解码效

福大大架构师每日一题

golang 音视频 ffmpeg 福大大

华为云网站安全解决方案:守护您的网站,让安全无忧

YG科技

动态资源技术JSP|Java与Html的美好相遇

浅羽技术

Java html 服务端 jsp 三周年连更

华为云:网络安全愈发重要,企业该如何保障自身业务安全?

YG科技

灵活应用Nginx Map:实战经验与实用方法

小毛驴的烂笔头

nginx linux运维 Nginx实践

灵活应用Nginx Rewrite:实战经验与实用方法

小毛驴的烂笔头

nginx linux运维

在Mac上快速体验AI作画

IT蜗壳-Tango

三周年连更

使用 docker manifest 构建跨平台镜像

江湖十年

Docker Desktop docker image docker build Docker 镜像

跨系统数据一致性问题解决方案汇总

架构精进之路

系统架构 数据一致性 三周年连更

FastAPI 快速开发 Web API 项目: 模板和 Jinja 介绍

宇宙之一粟

Python FastApi 三周年连更 Jinja2

热爱所有热爱

闫同学

三周年连更

“程序员”未来会失业吗 | 社区征文

BROKEN

三周年征文

Go语言并发编程利器(一):如何正确使用Channel

Jack

中小企业如何保障网络安全?用了这么多项目华为云其实还不错!

YG科技

一文读懂 Spring Bean 的生命周期

老周聊架构

三周年连更

SAP Emarsys 和 SAP Spartacus 的集成

汪子熙

SAP Spartacus 思爱普 三周年连更 Emarsys

开源趣事~记给OpenHarmony提PR的那些事

Bob

开源 Open Harmony

尚能饭否|技术越来越新,我对老朋友jQuery还是一如既往热爱

浅羽技术

jquery 前端 Web 框架 三周年连更

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