惯用Python的5个技巧(循环)

在这篇文章中,你将看到5种方法可以使你的python循环更习惯,运行得更快,内存效率更高。

img

在我看来,Python是计算机科学中最简单、最通用的语言之一。如果你正确地编写python代码,很难区分python代码和伪代码。但有时,在编写最漂亮的python代码的过程中,大多数开发人员会忘记一件事:代码的执行速度。

您可以编写可读性非常强的代码,而外行可能会将其混淆为语法技能较差的人所写的英语,但它是可以理解的。但该代码需要超过300毫秒才能运行。这可能不会造成太大的延迟,但在编程领域,这是一个严重的问题。

另一方面,可以用不同的习惯用法编写相同的代码,运行所需时间少于10毫秒。但是,即使是专业的python开发人员也很难理解它。

因此,对于开发人员来说,在这两个极端之间取得平衡是非常重要的。这些类型的代码在业界被称为惯用代码。

根据定义,惯用代码是一种用您的语言的通用方式执行通用任务的代码。换句话说,惯用代码是任何易于阅读,同时又非常高效的代码。

我在twitter上经常关注Raymond Hettinger (@raymondh),他是Python社区的核心开发人员之一,他为Python存储库贡献了大量代码,使Python语言更加习惯化。

在本博客中,我将介绍一些帮助您改进python代码的技术。开始:

a. range()

让我们从最明显的开始,假设你需要从2迭代到10。所以如果你是一个绝对的初学者,你可能会写这样的东西:

for i in [2,3,4,5,6,7,8,9,10]:
    print(i)

这样的方法是可行的,也是可以理解的,它不是一个可扩展的方法。如果你想循环2到200万呢。

在这种情况下,可以使用range(stop)或range(start, stop, [step,])内置函数。

range函数自动为您生成列表。例如,你可以将上面的代码改写为:

for i in range(2, 11):
    print(i)

注意我是怎么写的,从2开始到11结束,而不是10。这是因为range函数循环到stop - 1。在距离函数中除了开始和停止还有一个参数,那就是步长。步长决定范围必须跳过多少个数字。

假设您需要打印从2到10的所有偶数,在这种情况下,skip参数将为2。缺省值是1。

for i in range(2,11,2):
    print(i)

# OUTPUT: 2 4 6 8 10

现在假设您需要遍历一个列表。有了range()的知识,你可以这样做:

cloths = ['shirt', 'hat', 'socks', 'shorts']

for i in range(len(cloths))
    print(cloths[i])

但在python中,有更好的方法:

cloths = ['shirt', 'hat', 'socks', 'shorts']

for cloth in cloths
  print(cloth)

b. zip()

假设你有两个不同尺寸的列表,颜色和布料,你想要配对它们,直到较小的列表结束。在这种情况下,你可以写这样的代码:

colours = ['pink', 'red', 'green']
cloths = ['shirt', 'hat', 'socks', 'shorts']

n = min(len(colours), len(cloths))
for i in range(n):
    print(colours[i], cloths[i])

# OUTPUT
# pink shirt
# red hat
# green socks

这很好,但你也可以使用内置函数zip(*iterables)。这个函数最好的一点是,你可以传递任意数量的列表,而不仅仅是两个。让我重写上面的代码,然后向您解释zip是如何工作的。

colours = ['pink', 'red', 'green']
cloths = ['shirt', 'hat', 'socks', 'shorts']

for colour, cloth in zip(colours, cloths):
    print(colour, cloth)

# OUTPUT
# pink shirt
# red hat
# green socks

您可能已经猜到,zip接受任意数量的列表并返回包含每个列表中的一个元素的另一个列表。如您所见,两个版本产生相同的输出,但第二个版本看起来更干净。

c. reversed()

如果你想反向循环一个列表,传统的方法是这样的。

cloths = ['shirt', 'hat', 'socks', 'shorts']

for i in range(len(cloths)-1, -1, -1):
    print(cloths[i])
    
# Output
# -------
# shorts
# socks
# hat
# shirt

但是在Python中,您可以使用名为reversed()的内置函数。看看这个例子:

cloths = ['shirt', 'hat', 'socks', 'shorts']

for cloth in reversed(cloths):
    print(cloth)
    
# Output
# -------
# shorts
# socks
# hat
# shirt

第二个比第一个更干净更快。

d. enumerate()

您希望循环通过一个列表和索引。这在传统编程中非常直接:

cloths = ['shirt', 'hat', 'socks', 'shorts']

for i in range(len(cloths)):
    print(i, cloths[i])

# Output
# -------
# 0 shorts
# 1 socks
# 2 hat
# 3 shirt

但在python中有一种更干净、更有效的方法:

cloths = ['shirt', 'hat', 'socks', 'shorts']

for i, cloth in enumerate(cloths):
    print(i, cloth)

# OUTPUT
# -------
# 0 shorts
# 1 socks
# 2 hat
# 3 shirt

e. sorted()

您需要按排序顺序遍历列表,而不是运行排序算法,您可以使用sorted()内置方法。

-in method.

nums = [2,3,1,5,2]

for i in sorted(nums):
    print(i)

# OUTPUT
# ------
# 1
# 2
# 2
# 3
# 5

python排序函数使用Tim Sort,其平均复杂度为n*log(n)

对于反向排序,可以使用sorted属性(nums, reverse=True)

你想对字符串列表排序。

cloths = ['shirt', 'hat', 'socks', 'shorts']

for cloth in sorted(cloths):
    print(cloth)

# OUTPUT
# ------
# hat
# shirt
# shorts
# socks

它会根据字母排序,但如果你想根据字符串的长度排序,你可以用key attribute。例如:

cloths = ['shirt', 'hat', 'socks', 'shorts']

for cloth in sorted(cloths, key=len):
    print(cloth)

# OUTPUT
# ------
# hat
# shirt
# socks
# shorts

以上就是5种可以让你的python代码更习惯的技巧。

图片

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/549106.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免单优选电商模式:激发购买欲望的创新销售策略

免单优选电商模式,作为一种创新的销售策略,其核心在于通过价格优惠、渐进式激励和社交网络结合,有效刺激消费者的购买行为,进而推动销售业绩的快速增长。 一、合法合规,规避多层次奖励风险 该模式坚持合法合规的运营原…

【从浅学到熟知Linux】进程控制下篇=>进程程序替换与简易Shell实现(含替换原理、execve、execvp等接口详解)

🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 文章目录 进程程序替换什么是程序替换及其原理替换函数execlexeclpexecleexecvexecvpexecvpeexecve 替换函数总结实现…

3D视觉引导麻袋拆垛破包 | 某大型化工厂

客户需求 此项目为大型化工厂,客户现场每日有大量麻袋拆垛破包需求,麻袋软包由于自身易变形、码放垛型不规则、运输后松散等情况,无法依靠机器人示教位置完成拆垛。客户遂引入3D视觉进行自动化改造。 工作流程: 3D视觉对紧密贴合…

公司文件加密软件有监视功能吗?

公司文件加密软件不仅提供了强大的文件加密能力,还具备了监视功能,确保文件在使用过程中的安全性。华企盾DSC数据防泄密系统中的监控功能体现在以下几个方面: 加密文件操作日志:记录所有加密文件的申请、审批、扫描加解密、自动备…

数据分析

数据分析流程 数据分析开发流程一般分为下面5个阶段,主要包含:数据采集、数据处理、数据建模、数据分析、数据可视化 数据采集: 数据通常来自于企业内部或外部,企业内部数据可以直接从系统获得,外部数据则需要购买&a…

【面试经典 150 | 链表】删除链表的倒数第 N 个结点

文章目录 写在前面Tag题目来源解题思路方法一:统计节点个数方法二:双指针 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本…

Python 爬虫:如何用 BeautifulSoup 爬取网页数据

在网络时代,数据是最宝贵的资源之一。而爬虫技术就是一种获取数据的重要手段。Python 作为一门高效、易学、易用的编程语言,自然成为了爬虫技术的首选语言之一。而 BeautifulSoup 则是 Python 中最常用的爬虫库之一,它能够帮助我们快速、简单…

【Java探索之旅】数组使用 初探JVM内存布局

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、数组的使用1.1 元素访问1.2 数组遍历 二、JVM的内存布局🌤️全篇总结 …

Java面试题目和答案【终极篇】

Java面向对象有哪些特征,如何应用 ​ 面向对象编程是利用类和对象编程的一种思想。万物可归类,类是对于世界事物的高度抽象 ,不同的事物之间有不同的关系 ,一个类自身与外界的封装关系,一个父类和子类的继承关系, 一个类和多个类的多态关系。万物皆对象,对象是具体的世…

Linux 删除文件或文件夹命令(新手)

一、删除文件夹 rm -rf 路径/目录名 1 强制删除文件夹及其子文件。 二、删除文件/文件夹:rm 命令 rm 删除命令,它可以永久删除文件系统中指定的文件或目录。 rm [选项] 文件或目录 选项: -f:强制删除(force&am…

我们试用了6款最佳Appium替代工具,有些甚至比Appium更好

Appium是一款知名的自动化测试工具,用于在iOS、Android和Windows等移动平台上运行测试。就开源移动测试自动化工具而言,虽然替代品有限,但它们确实存在。我们找到了一些优秀的Appium替代品,它们也可以满足自动化测试要求&#xff…

聚道云软件连接器助力医疗器械有限公司打通金蝶云星辰与飞书

摘要 聚道云软件连接器成功将金蝶云星辰与飞书实现无缝对接,为某医疗器械有限公司解决采购订单、付款单同步、审批结果回传、报错推送等难题,实现数字化转型升级。 客户介绍 某医疗器械有限公司是一家集研发、生产、销售为一体的综合性医疗器械企业。…

BackTrader 中文文档(一)

原文:www.backtrader.com/ 主页 欢迎来到 backtrader! 原文:www.backtrader.com/ 一个功能丰富的 Python 框架,用于回测和交易 backtrader允许您专注于编写可重复使用的交易策略、指标和分析器,而不必花时间构建基础…

打一把王者的时间,学会web页面测试方法与测试用例编写

一、输入框 1、字符型输入框: (1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!#¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,…

Web App 入门指南:构建预测模型 App 的利器(shiny)

Web App 入门指南:构建预测模型 App 的利器 简介 近年来,随着机器学习和人工智能技术的快速发展,预测模型在各行各业得到了广泛应用。为了方便地部署和使用预测模型,将模型构建成 Web App 是一种非常好的选择。Web App 无需下载…

27.8k Star,AI智能体项目GPT Pilot:第一个真正的人工智能开发者(附部署视频教程)

作者:Aitrainee | AI进修生 排版太难了,请点击这里查看原文:27.8k Star,AI智能体项目GPT Pilot:第一个真正的人工智能开发者(附部署视频教程) 今天介绍一下一个人工智能智能体的项目GPT Pilot。…

Postman 环境变量配置初始调用登录脚本赋值Token

效果 新建环境 切换 Environments 标签下 点击上面加号增加环境变量 使用环境变量 使用{{变量名}}引用变量使用 Pre-request Script 全局 一般授权接口都需要再调用接口前,进行登录授权,这里使用了全局的请求前脚本调用。 脚本示例 // 基础地址 var…

前端跨域怎么办?

如果网上搜到的方法都不可行或者比较麻烦,可以尝试改变浏览器的设置(仅为临时方案) 1.新建一个Chrome浏览器的快捷方式 2.鼠标右键,进入属性,将以下命令复制粘贴到目标位置(可根据Chrome实际存放位置修改…

数据结构DAY4--哈希表

哈希表 概念:相当于字典,可以根据数据的关键字来寻找相关数据的查找表。 步骤:建立->插入->遍历->查找->销毁 建立 建立数据,形式随意,但一般为结构体(储存的数据量大)&#xff…

vivado AXI 接口事件

AXI 接口事件 在 Vivado 硬件管理器中 , 如果使用 System ILA IP 对设计 AXI 接口进行调试 , 那么“波形 (Waveform) ”窗口会显示对 应于 System ILA 所探测的接口的接口插槽、事件和信号组。正如下图所示 , “ Waveform ”窗口会显示…