好家伙!不再写Python for 循环!

100道Python大厂面试题附答案(一),好家伙直接卷起来了 对于大部分Python学习者来说,基础核心知识基本已经掌握了,但"纸上得来终觉浅,绝知此事要躬行",要想完全掌握Python,还得靠实践应用。比如面试的时候,面试官会出其不意的问一些问题,今天给大家分享一些Python面试内容,都是基础实例,经典实用,代码清晰可拿来即用,很适合学习提升使用,适用性广,实用性强。话不多说,一起来看看吧! 阅读详情

ce0c32c65a5279fb99a6ba048869a6ba.png

来源:网络,版权归原作者所有,如侵犯,请联系删除

为什么要挑战自己在代码里不写 for loop?因为这样可以迫使你去学习使用比较高级、比较地道的语法或 library。文中以 python 为例子,讲了不少大家其实在别人的代码里都见过、但自己很少用的语法。

自从我开始探索 Python 中惊人的语言功能已经有一段时间了。一开始,我给自己一个挑战,目的是让我练习更多的 Python 语言功能,而不是使用其他编程语言的编程经验。这让事情变得越来越有趣!代码变得越来越简洁,代码看起来更加结构化和规范化。下面我将会介绍这些好处。

通常如下使用场景中会用到 for 循环:

  • 在一个序列来提取一些信息。

  • 从一个序列生成另一个序列。

  • 写 for 已成习惯。

幸运的是,Python 已经有很多工具可以帮助你完成这些工作,你只需要转移你的思路,并以不同的角度来思考它。

通过避免编写 for 循环,你可以获得什么好处:

  • 较少的代码量

  • 更好的代码可读性

  • 更少的缩进(对 Python 还是很有意义的)

我们来看一下下面的代码结构:

# 1
with ...:
    for ...:
        if ...:
            try:
            except:
        else:

在这个例子中,我们正在处理多层嵌套的代码,这很难阅读。这个例子使用了多层嵌套的代码。我在这段代码中发现它无差别使用缩进把管理逻辑(with, try-except)和业务逻辑(for, if)混在一起。如果你遵守只对管理逻辑使用缩进的规范,那么核心业务逻辑应该立刻脱离出来。

"扁平结构比嵌套结构更好" - The Zen of Python

可以使用的已有的工具来替换 for 循环

1.List Comprehension / Generator 表达式

我们来看一个简单的例子。如果你想将一个数组转换为另一个数组:

result = []
for item in item_list:
    new_item = do_something_with(item)
    result.append(item)

如果你喜欢 MapReduce,你也可以使用 map,或者 Python 中的 List Comprehension:

result = [do_something_with(item) for item in item_list]

同样,如果您只想迭代数组中的元素,也可以使用一样的代码 Generator Expression。result = (do_something_with(item) for item in item_list)

2.函数

如果您想要将一个数组映射成另外数组,只需调用 map 函数,就可以用一个更高级、更实用的编程方式解决这个问题。

doubled_list = map(lambda x: x * 2, old_list)

如果要将序列减少为单个,请使用 reduce

from functools import reduce
summation = reduce(lambda x, y: x + y, numbers)

另外,许多 Python 内置函数都会使用 iterables:

>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> all(a)
False
>>> any(a)
True
>>> max(a)
9
>>> min(a)
0
>>> list(filter(bool, a))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> set(a)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> dict(zip(a,a))
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
>>> sorted(a, reverse=True)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> str(a)
'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]'
>>> sum(a)
45

3.Extract Functions or Generators

上述两种方法是很好的处理更简单的逻辑。更复杂的逻辑怎么样?作为程序员,我们编写函数来抽离出复杂的业务。相同的想法适用于此。如果你是这样写的:

results = []
for item in item_list:
    # setups
    # condition
    # processing
    # calculation
    results.append(result)

显然你对一个代码块添加了太多的责任。相反,我建议你做:

def process_item(item):
    # setups
    # condition
    # processing
    # calculation
    return result


results = [process_item(item) for item in item_list]

如果换成嵌套函数会如何

results = []
for i in range(10):
    for j in range(i):
        results.append((i, j))

换成 List Comprehension 来实现是这样的:

results = [(i, j)
           for i in range(10)
           for j in range(i)]

如果你的代码块需要记录一些内部状态

# finding the max prior to the current item
a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
results = []
current_max = 0
for i in a:
    current_max = max(i, current_max)
    results.append(current_max)


# results = [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]

我们使用 generator 来实现这一点:

def max_generator(numbers):
    current_max = 0
    for i in numbers:
        current_max = max(i, current_max)
        yield current_max


a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
results = list(max_generator(a))

读者可能要问 “等等!你在 generator 中用到 for 循环,作弊啊!别急,再看看下面的代码。

不要自己写。itertools 会帮你实现了

这个模块很简单。我相信这个模块在大多数场景中可以替换你原先的 for 循环。例如,最后一个例子可以重写为:

from itertools import accumulate
a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
resutls = list(accumulate(a, max))

另外,如果要迭代组合序列,则需要使用product(), permutations(), combinations()。

结论

  • 在大多数情况下,您都不需要编写 for 循环。

  • 你应该避免编写 for 循环,这样会有更好的代码可读性。

推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

点阅读原文,看B站50个Python趣味案例!

s9keaz128 UART Bootloader 单片机篇(上) 网络上充斥着各种各样的串口升级方案,基本都是基于Y-Mode协议下载。采用这种升级方案学习还是可以,用在产品上还是有点欠缺。如下载完成后,需要把时间发送到设备就不好搞了。如下这个设备返回的信息,最后一项就是固件更新时间。固件名称: KEA128编译时间固件版本: 1.0.3硬件版本: 1.0.3产品序列号功能名称: App固件更新时间串口升级演示视频。 阅读详情

相关推荐

告别手动处理:用 Bruker NSMatlabUtilities 工具箱批量分析 AFM 力曲线数据的实战案例

本文介绍了如何使用 Bruker NSMatlabUtilities 工具箱实现 AFM 力曲线数据的批量分析,解决传统手动处理耗时且易出错的问题。通过实战案例展示工具箱的核心功能,包括数据读取、力曲线分析和可视化,帮助科研人员提升数据处理效率和准确性。

weixin_28362173的博客 214

不再写Python for 循环

为什么要挑战自己在代码里不写 for loop?因为这样可以迫使你去学习使用比较高级、比较地道的语法或 library。文中以 python 为例子,讲了不少大家其实在别人的代码里都见过、但自己很少用的语法。自从我开始探索 Python 中惊人的语言功能已经有一段时间了。一开始,我给自己一个挑战,目的是让我练习更多的 Python 语言功能,而不是使用其他编程语言的编程经...

公众号:Python研究者 492

【UE 反射】反射的原理是什么?如何使用机制?

静态类型检查确保了类型的早期一致性和高效的代码执行,但减少了灵活性。动态类型检查提供了更大的灵活性,但增加了运行时的开销和潜在的错误。反射作为一种动态特性,无论是在静态类型语言还是动态类型语言中,都提供了强大的运行时类型操作能力,但也伴随着性能和安全性方面的权衡。通过理解这些联系,开发者可以在不同的编程语言和应用场景中选择适合的类型检查方式和反射机制,以实现所需的动态行为和灵活性,同时保证性能和安全性。

hhw_hhw的博客 6035

chatgpt赋能python:Python中如何停止for循环:常见技巧和技术

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

vacvefito的博客 1818

DolphinScheduler+DataX实战:5分钟搞定MySQL到Hive数据同步(附完整JSON配置)

本文详细介绍了如何利用DolphinScheduler与DataX构建企业级数据同步流水线,实现MySQL到Hive的高效数据同步。文章提供了从环境部署、核心组件配置到完整JSON配置的实战指南,并深入探讨了性能调优、增量同步策略以及生产环境下的监控与错误处理,帮助读者快速搭建稳定可靠的数据同步方案。

5b6n7m8的博客 255

在银河麒麟V10上部署Atlas 300i Duo:从固件到驱动的一站式踩坑笔记

日期:2025-09-09关键词:鲲鹏920、Atlas 300i Duo、银河麒麟V10、NPU、驱动、固件。

weixin_41544125的博客 2819

【Python】减少不必要的 for 循环

python之减少不必要的 for 循环

Llmzw的博客 1197

修改 Alist 密码时报错?看看这个坑怎么解决!

启动服务后,再修改密码”。以后再遇到类似问题,先检查服务是否正常运行,说不定就能少踩不少坑。如果还有其他 Alist 的问题,欢迎在评论区留言交流~

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1155

Python中替代for循环的几种方法

Python中替代for循环的几种方法 1.for循环 之前博客有发过for循环的本质,但不究其本质,for循环我们可以总结为是对序列进行遍历操作,生成另一个序列的过程。 for i in iterable: do something 可以说写for循环结构已经成为当我们面对相关问题时的习惯,这也是在代码中十分常见的结构,但理性地去思考,for循环相比于扁平结构是否还有一些不足? 1.更多的代码行数 2.较差的代码可读性 3.运行性能较差 2.可以替代for循环的方法 (1)列表生成器 def f(x

endlessfc的博客 8707

QT-Creator安装教程(windows)

本文介绍了Qt的下载安装步骤:1)通过镜像源下载安装包;2)运行exe文件时使用命令行参数指定镜像地址;3)在安装过程中选择路径和自定义安装组件,包含QT5和QT6版本的详细安装说明;4)安装后可继续添加扩展包或卸载组件。重点提示了QT6必须勾选的关键组件,并提供了组件管理的操作方法。

qq_53545309的博客 3120

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-差分信号

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-单端信号详细介绍了单端信号如何进行TDR仿真分析,下面介绍如何对差分信号进行TDR分析,还是以下图为例进行分析。Impedance是时域阻抗曲线,也是最主要的观测指标,注意:impedance曲线的时间刻度不是延时,延时=时间刻度/2,因为TDR测量的是用一来一回的原理去测量的。Use Lossy peeling 默认不勾选,勾选的话代表同时仿真无损和有损方案,不勾选代表仅仿真有损方案。

weixin_54787054的博客 858

3种方案 | 抛弃for循环,让Python代码更丝滑 !

在这个例子中,我们正在处理多层嵌套的代码,这很难阅读。如果你是这样写的:​​​​​​​。例如,最后一个例子可以重写为:​​​​​​​。另外,许多 Python 内置函数都会使用 iterables:​​​​​​​。如果你想将一个数组转换为另一个数组:​​​​​​​。换成 List Comprehension 来实现是这样的:​​​​​​​。相反,我建议你做:​​​​​​​。如果要将序列减少为单个,请使用 reduce​​​​​​​。我们使用 generator 来实现这一点:​​​​​​​。

2401_86168842的博客 1039

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python中for循环里remove()方法的那些坑

一个妹子来问我这样一个问题: x = [1,2,1,2,1,1,1] for i in x: if i==1: x.remove(i) print(x) 为什么这个打印结果是[2,2,1],不是应该是[2,2]吗?我随便一扫,数组、循环,这不是简单得不能再简单的问题嘛,但是仔细一看,心中一万只草泥马奔腾而过,好家伙,我也懵逼了,我也想问不应该是[2,2]吗?我靠,这怎么也不能给妹子说我也看不懂啊。所以我尝试着先打印出中间结果看一看: x = [1,2,1,2,1,1,1] for i in x:

weixin_42499305的博客 1090

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

用Python写几行代码,一分钟搞定一天工作量,同事直呼:好家伙!

前几天有一个读者说最近要整理几千份文件,头都要整秃了,不知道能不能用Python解决,我们来看一下,你也可以思考一下。 由于涉及文件私密所以具体内容已做脱敏处理。 大概是这样,一个文件夹下有多份会议通知信息(本文以 7 份文件为例) 每一份通知打开格式基本类似,如下所示???? 现在需要将每份会议文档中的 学习时间、学习内容、学习形式、主持人 四项关键信息提取出来,整理到 Excel 表格中: 在他真实需求中,会议通知四年积累下来有快 1000 份(四年开了这么多次会也是很厉害...)

qq_38887171的博客 479

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

好家伙!Python的职位居然这么多

目录前言项目准备网页分析关于动态渲染关于翻页需求分析与功能实现详情页分析获取详情数据结果展示可视化观察学历统计工作经验统计最后 前言 在上一篇文章中,为大家分享了selenium的使用方法,因此今天这篇文章为大家带了的就是关于selenium的实战项目。 本次项目的内容是爬取51job的招聘信息,希望接下来的内容对你找工作有所帮助。 项目准备 本次项目涉及到的库比较多,需要各位小伙伴们先做好准备: requests selenium lxml csv pandas matplotlib 安装方式应该不需

weixin_47248700的博客 339

如何用Python写一个“猜数字”的小游戏,没想到如此简单!

#纯干货分享 游戏规则:计算机想一个[1,10]之间的整数,让玩家猜测,并且在每次猜测后告诉玩家猜大了还是猜小了。如果玩家在6次之内猜到正确的数字就赢了。在游戏最后,显示玩家共猜了多少次。 IPO描述: 输入:玩家猜测的数字 处理:计算机判断是否正确以及猜大了还是猜小了 输出:判断结果 用到的Python语法有: import语句 randint()函数 for语句 str()函数,int()函数,float()函数 比较操作符 if语句 break语句 = 与 == 的区...

m0_62895487的博客 6132

用Python写代码,轻松搞定一天工作量,同事直呼:好家伙

前几天有一个读者说最近要整理几千份文件,头都要整秃了,不知道能不能用Python解决,我们来看一下,你也可以思考一下。

程序员二黑 500

python底层原理 知乎_用Python写代码,一分钟搞定一天工作量,同事直呼:好家伙...

来源:早起Python作者:陈熹、刘早起大家好,我是早起。前几天有一个读者说最近要整理几千份文件,头都要整秃了,不知道能不能用Python解决,我们来看一下,你也可以思考一下。由于涉及文件私密所以具体内容已做脱敏处理。大概是这样,一个文件夹下有多份会议通知信息(本文以 7 份文件为例) 每一份通知打开格式基本类似,如下所示 现在需要将每份会议文档中的 学习时间、学习内容、学习形式、主持人 四项...

weixin_39978257的博客 224

好家伙!清华电子系大一暑假Python课程大作业上知乎热榜!竟是个CV任务

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达编辑:Amusi | 来源:知乎https://www.zhihu.com/question/471999381本文...

阿木寺的博客 5394

好家伙,MacOS 新版本终于删掉自带 Python2,连 Python 死忠粉都叫好!

喜大普奔,苹果现已正式推出的 macOS 12.3 版本,终于把自带的 Python 2 给删了!此前测试版推出时,就有网友激动地表示:“终于!虽然我是 Python 的死忠粉,但我真的希望操作系统们不要再内置Python了!!!”“操作系统捆绑编程语言是缺点而非优点。”毕竟,一顿操作猛如虎,最后因为 Python 版本混乱代码跑不起来的,应该不止我一个……具体的更新是酱...

小詹学python的博客 614

收藏,7个学习Python编程的最佳开源库!网友直呼好家伙

很多伙伴们在学习Python的过程中,更倾向于在Github上寻找Python学习资料,今天小F就和大家分享Github上7个绝佳的Python编程学习的开源库: 1、learn-python3 这个存储库一共有19本Jupyter笔记本。它涵盖了字符串和条件之类的基础知识,然后讨论了面向对象编程,以及如何处理异常和一些Python标准库的特性等。每一个主题都有一个“notebook”链接,它会向你介绍该主题和一些示例代码,当你完成这些内容之后,还有一个练习链接,点击后你就可以做一...

weixin_55551408的博客 452

用 Python 写几行代码,一分钟搞定一天工作量,同事直呼:好家伙!_一天的工作量用编程

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

2301_76379671的博客 101

python循环-综合案例2

给一个数值,让用户猜测要求:1.数值相等,表示输入正确,程序结束2.如果不相等,则提示大了,还是小了。继续让用户输入代码:# 给一个数值,让用户猜测 # 要求: # 1.数值相等,表示输入正确,程序结束 # 2.如果不相等,则提示大了,还是小了。继续让用户输入 shuZi = 1000 count = 0 while True: count += 1 num = input("请输...

心支柱的博客 506

【AI零基础】还在用For循环处理数据?带你用NumPy把Python速度提升100倍

NumPy 就是 Python 世界的“高性能数学计算器”。做AI开发,只要看到for循环处理数组——想想能不能用 NumPy 批量解决?🚀。

👨‍💻 12年全栈老兵 | 擅长把复杂的代码逻辑翻译成“人话” | 只讲听得懂的技术故事 🚀 812
上一篇: 5个方便好用的Python自动化脚本
下一篇: 华为又招天才少年了!简直降维打击!
菜鸟学Python
博客等级 码龄9年 8088粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值