写点什么

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

评论

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

原“明星级”自动驾驶创企「云骥智行」入局具身智能赛道,并完成产品首发!

机器人头条

自动驾驶 人形机器人 具身智能

【YashanDB知识库】复合索引下in大量参数查询性能慢

YashanDB

数据库 yashandb

【连载 06】自定义线程池(下)

FunTester

Anthropic 工程师关于提示词工程的深入探讨

亚马逊云科技 (Amazon Web Services)

DeFi即将迎来大爆发:2025年金融变革的背后逻辑与机会

chainwiseweb3

DeFi质押挖矿 DeFi流动性挖矿 defi开发 defi金融开发 去中心化合约开发

《计算机组成及汇编语言原理》阅读笔记:p1-p8

codists

计算机组成及汇编语言原理

汽车服务行业小程序一站式开发解决方案

V\TG【ch3nguang】

合约现货量化一键跟单交易软件开发

V\TG【ch3nguang】

【YashanDB知识库】YMP迁移过程中报错YAS-02143或YAS-02193

YashanDB

数据库 yashandb

金融保险行业数字化创新实践:如何高效落地自主可控的企业级大数据平台

tapdata

大数据平台 数据集成 数据服务 实时数据集成 银行保险业数字化转型

不会编程,也可以搭建体育比分直播平台

熊猫比分大卫

体育赛况资讯直播app开发 体育直播网源码 体育动画直播

直播效果搭建的神兵利器、音乐制作的全能小将----Studio One

阿拉灯神丁

音频 编曲宿主 StudioOne 音乐制作软件 后期混音效果全套插件

Cyber Triage 3.13 发布,新增功能概览

sysin

数字取证

向佐蹭热点卖货大赚,Java之父搞流量一年赚300万,程序员做自媒体的“设计模式”

陆通

不同价位的LED显示屏,都有什么差别?

Dylan

LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家

淘宝天猫API接口深度解析:商品详情与关键词搜索商品的高效应用与实战代码

代码忍者

淘宝API接口 淘宝评论API

亚马逊API接口深度解析:如何高效获取商品详情与评论数据

代码忍者

亚马逊商品详情API 亚马逊API接口

HarmonyOS Next-从应用开发到上架全流程解析

申公豹

harmoyos

探索C#中Task与CancellationTokenSource的协同艺术

代码忍者

阿里巴巴1688 API接口详解:商品详情与关键词搜索商品的高效应用与实现

代码忍者

1688API接口 关键词搜索1688API

2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。 你被施加了一种诅咒,吸

福大大架构师每日一题

福大大架构师每日一题

淘宝电商运营的小秘籍,看完血赚。

科普小能手

运营 淘宝 技巧 电商 运营干货

深度解析京东API接口:jd.item_get如何高效获取商品详情与SKU

代码忍者

京东API接口 京东商品API

基于STM32F4单片机实现ROS机器人主板

芯动大师

机器人 stm32 ROS

微店API接口深度解析:如何高效获取商品详情micro.item_get及Python代码示例

代码忍者

微店API

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