首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你能发现这段 Python 代码 bug 吗?

任务是分析文本文件一些以逗号分隔数据,如下所示: 这个文本文件包含若干宽度可变十六进制值,每行至少三个字段。我只关心第一个和第三字个段。...在我看来,分析工作可分为三步: 循环读取每一行数据; 利用逗号将数据分解成一个列表; 选取第一个和第三个元素,并将它们转换为整数。...下面,我来详细解释一下这段代码,并深入剖析我究竟错在哪儿了。 代码详解 CSV文件是列表列表 我简单地认为,CSV 数据就是列表列表。因此,我可以将各个元素视为嵌入列表。...这个嵌套列表会生成以下字节码: 然后,我一些自己代码进行扩展,最终得到了以下代码: 错误 事实证明,Python 无法按照我想象将可迭代文本分解与推导式结合起来,你必须把 .split(",...下图展示了正确生成器表达式与我编写代码之间差异: 你看出问题所在了吗?代码问题在于,在分解文本之前,.split() 返回值是迭代器。

11930

你能发现这段 Python 代码 bug 吗?

在我看来,分析工作可分为三步:循环读取每一行数据;利用逗号将数据分解成一个列表;选取第一个和第三个元素,并将它们转换为整数。...看似很简单,我可以使用 pandas DataFrame 编写几行代码就够了。下面是我编写代码:你发现 bug 了吗?反正我没看出来。下面,我来详细解释一下这段代码,并深入剖析我究竟错在哪儿了。...in nested_lists for element in sublist]以前我曾接触过 C 和 C++,之后才学习了 Python,因此在学习嵌套推导式时,我感觉 Python 只是机器可以理解代码...这个嵌套列表会生成以下字节码:然后,我一些自己代码进行扩展,最终得到了以下代码:错误事实证明,Python 无法按照我想象将可迭代文本分解与推导式结合起来,你必须把 .split(",") 调用放在另一个列表...下图展示了正确生成器表达式与我编写代码之间差异:你看出问题所在了吗?代码问题在于,在分解文本之前,.split() 返回值是迭代器。

19120
您找到你想要的搜索结果了吗?
是的
没有找到

快速了解Pythonfor循环(语法和代码示例)

之前讲过在Python循环分为两大类,一类是while循环另一类是for循环,不管是什么循环作用是控制代码重复执行。...一、语法: for 临时变量 in 序列: 重复执行代码1 重复执行代码2     ...... 临时变量:程序员自己自定义 序列:所谓序列一般指的是数据序列。...直白理解数据序列:如果一个数据内部如果由多个数据组成那么这样数据我们叫做序列。 二、快速体验: 执行结果: 图片1.png 以上结果很显然是把字符串每一个字符都循环输出了一遍。...下一篇文章我们再来看看怎么利用break和continue退出for循环。...Python基础教程各大网站上就有很多,当然不管你学习到了哪里大都是从基础过来,所以在学习基础时候不要偷懒,一定要搞定语法和原理步骤。

66820

6个实例,8段代码,详解Pythonfor循环

下面的代码块演示如何在Python 中使用for循环来遍历列表元素: 上述代码段是将三个字母分行打印。...你可以通过在print语句后面添加逗号“,”将输出限制在同一行显示(如果指定打印字符很多,则会“换行”),代码如下所示: 当你希望通过一行而不是多行显示文本内容时,可以使用上述形式代码。...接下来将line内容分割为单词,然后通过try代码块逐个将单词数值累加到变量sum 。如果发生异常,则将当前str内容追加到变量invalidStr。...此函数循环可打印出参数1 到n次方,n取值范围在1到maxCount+1之间。 代码第二部分通过一个for循环调用pwr()函数从1到maxCount+1值。...清单7 后半部分通过一个循环遍历字符串text1每个单词,并判断其是否出现在text2

2K20

python十几行代码实现简单播放器

有没有感觉好复杂。没错,一个音视频播放背后就是这么复杂,不过对于我们使用者来说使用是简单。这也是我们常追求一种产品哲学,把复杂留给后台,把简单呈现给用户。...二、使用python简单实现播放器 接触到python之后,发现其强大之处,结合自己技术方向,简单实现了一个播放器,可以说,这样组合把留给程序员复杂也进一步减少了呢。...pyglet.media.load("F:\\FFOutput\\parent.vob") player.queue(source) player.play pyglet.app.run() 关于这段代码说明...: 文件路径一定要写对哦,就是你测试视频所在路径; 这是一个简单版本,所以只有播放,而没有控制,如暂停,播放等选项 别忘了写pyglet.app.run()这是程序事件循环起点哈。...有没有很强大?十几行代码,实现一个简单播放器,有没有很简单。可以尝试一下看看效果哦!

2.3K31

Pythonic:递归、回溯等5种方法生成不重复数字整数

=j: print(ii + jj + k) OK,这段代码确实能够满足题目的功能要求,但是好像有个小问题:在上面的代码,先选择i,然后再依次选择j和k,如果选到重复数字就“放回去”重新选,有没有办法可以保证在选择时候避免选到已有的数字呢...现在问题又来了:如果题目稍微修改一下,让选择4个不重复数字组成4位数,肿么办?修改上面的代码,再增加一个嵌套循环来选择第4个数?要是让选择8个呢?再改?...很明显,这是不行,做不到自适应代码绝对不是好代码。 如果循环次数没法提前确定,如何才能做到选择任意个(当然小于等于10)不重复数字来组成整数呢?答案是递归和回溯。...回溯法和递归法往往以代码简洁著称,但是在很多时候确实也比较难理解。难道就真的没有更好办法了吗?...程序设计基础》和《Python程序设计》(第2版)(董付国编著,清华大学出版社)两本教材例3-13进行拓展。

1.1K70

数据分析工具篇——for循环运算优化(一)

,特别是前两个,一个是小数据使用包,一个是大数据使用包,随着python不断丰富,这两个包越来越完善,今天我们先了解一下for循环优化方法: for循环 ?...小有成就感同时我们计算了一下运行时间:187s。 在代码运行过程中出现这样时间简直会疯,因为这段代码不仅会消耗很长时间,而且会吃掉你内存,让你无法做其他事情。...有没有很意外? 我们暂且忽略最新函数在上面这段代码应用以及报错,单纯看循环结构,你感觉这段代码怎么样呢?...我们仔细分析上面的代码就会发现其中奥秘: 1)代码将for循环做了拆解,三层铺成了一层,在复杂度计算上降低了三个量级,原来是O(n3)=10003,而修改后成为了O(n)=1000,时间上也减少了至少三个量级...世间总有大佬,如果没有,就再等等~ Python中提供了一些较为高级函数和nb数据结构,这些函数和数据结构已经被各个大佬调优并封装,例如:numpy向量结构、pandasgroupby、apply

1.3K20

代码优化 5 大原则,第 1 条相信你一开始就没想到!

在其中一个读取页面上,被塞了一个等待语句,程序到这里就停上 20 秒。 ? 这大约是原来调试这段代码程序员在排查过程插入等待命令,结果在将代码合并进生产环境时候忘记把这行东西去掉了。...而在生产代码,每次调用读取时候,这段等待命令都会被执行,这就进一步放大了产生问题。 于是,我把这行代码删掉了。好家伙,一切都正常了!...下面是一些值得你考虑要点,遵循这些原则,可以让你代码更具响应性,也能减少你给用户设备以及它们连接到数据库带来额外压力。 1. 不要进行优化 代码优化第一条原则就是,“不要”优化它。...你要去理解这个程序将会被如何使用,知道它是在怎样环境下运行,明白如果让它运行更快到底有没有好处。在真正开始代码优化之前,你必须要问自己这几个问题。...最常见错误做法就是,花了一整天去重构优化一段代码,结果在运行时候发现,这段代码平时根本用不到。 分析器能精确地测量出你程序把时间都花在什么步骤上了。

73620

代码优化 5 大原则,第 1 条相信你一开始就没想到!

在其中一个读取页面上,被塞了一个等待语句,程序到这里就停上 20 秒。 这大约是原来调试这段代码程序员在排查过程插入等待命令,结果在将代码合并进生产环境时候忘记把这行东西去掉了。...而在生产代码,每次调用读取时候,这段等待命令都会被执行,这就进一步放大了产生问题。 于是,我把这行代码删掉了。好家伙,一切都正常了!...下面是一些值得你考虑要点,遵循这些原则,可以让你代码更具响应性,也能减少你给用户设备以及它们连接到数据库带来额外压力。 1. 不要进行优化 代码优化第一条原则就是,“不要”优化它。...你要去理解这个程序将会被如何使用,知道它是在怎样环境下运行,明白如果让它运行更快到底有没有好处。在真正开始代码优化之前,你必须要问自己这几个问题。...最常见错误做法就是,花了一整天去重构优化一段代码,结果在运行时候发现,这段代码平时根本用不到。 分析器能精确地测量出你程序把时间都花在什么步骤上了。

36910

Python代码找bug(5)

Python代码找bug(5) 上期代码设计需求: 利用条件运算符嵌套来完成此题:学习成绩>=90分同学用A表示,60-89分之间用B表示,60分以下用C表示。 代码如下: ?...Python是讲究极简哦,只需要 elif即可。 所以,正确代码应该是这样: ? 嗯,这个看起来就比较“纯正”了!...循环语句肯定是要用到,如果使用累计求和办法是可以直接获得第N次落地时球经过了多少米,累计折半(除以2)计算也可以直接得到最后反弹高度。 但是,但是为什么要定义两个列表呢?...而不是向我们惯常做法,通过循环代码在计算以后直接获取最后想要结果,而忽略中间状态数据。 我感觉这是两种不同思维习惯。我猜测,是否跟Python基因有关?!...好了,问题是这段漂亮代码也还是有些瑕疵,bug在哪呢? 找出来,发到留言里,明天对答案。

84730

一日一技:pandas ,如何分组再取 N项?

摄影:产品经理 还在吃火锅 在 pandas ,DataFrame 是我们经常用到工具。有时候,我们可能会需要对数据按某个字段进行分组,然后每个组取N项。例如: 现在,我想每个职位任取三个用户。...相信有同学会使用 for 循环,依次循环每一行,每个职位选3个,存入一个临时列表里面。循环完成以后再转成一个新 DataFrame。但这个方式显然不够智能。...那么,我们有没有什么办法能够不使用循环就做到这一步呢?也许有同学想到了使用 groupby。我们来看看效果。 看起来仅仅是统计了每个职位数量。那么,如何才能保留所有字段呢?...这个时候,我们思考一下 Python 里面,如果要使用itertools.groupby,官方文档里面有这样一段话: Generally, the iterable needs to already be...如下图所示: 这段话告诉我们,要使用itertools.groupby,我们需要提前对被分组字段进行排序。

64210

「SDL第四篇」事件处理

SDL事件处理 要想了解 SDL 事件处理,我们必须要知道一个原理是,SDL将所有事件都存放在一个队列。所有对事件操作,其实就是对队列操作。...有的同学可以会通过修改代码最后面的 SDL_Delay 函数,增加它等待时间让窗口多活一段时间。 但这样体验实在是太糟糕了。有没有一种好办法可以解决这个问题呢?...当然是可以。我们只需要在之前程序末尾增加下面这段代码即可。它会一直检测用户是否按下了退出按钮。如果检测到了,则直接退出,否则保持显示状态。 while(!...外面的while循环意思是,当队列为空时候,重新执行内部while循环。 也就是说,这段代码一直在工作,从不休息。所以导致cpu占到了 100%。...在本文中主要介绍了SDL是如何处理事件,SDL为我们提供了非常简单API,这大大减少了我们开发成本。

1.2K10

学习一下Python垃圾回收

这段代码本身应该很好理解,不过别忘了,getrefcount 本身也会引入一个计数。 另一个要注意是,在函数调用发生时候,会产生额外两次引用,一次来自函数栈,另一个是函数参数。...试想一下,如果这段代码出现在生产环境,哪怕 a 和 b 一开始占用空间不是很大,但经过长时间运行后,Python 所占用内存一定会变得越来越大,最终撑爆服务器,后果不堪设想。...所以,在 Python 垃圾回收实现,mark-sweep 使用双向链表维护了一个数据结构,并且只考虑容器类对象(只有容器类对象才有可能产生循环引用)。...像前文提到手环引用,有没有办法将变量引用关系使用一个树状图来表示呢?这样就可以调试内存泄漏了。事实上,真有,它叫 objgraph,一个非常好用可视化引用关系包。...5、总结 1、Python 会自动进行垃圾回收。2、引用计数为 0 时回收是最简单一种情况,还会有循环引用。3、Python 有两种自动回收算法。

49210

使用Cython加速Python代码

如果你有一个很大for循环,你只能使用它,而不能放入矩阵,因为数据必须按顺序处理,那该怎么办?有没有办法加快Python本身速度? 来吧,看看Cython!...对于纯Python,变量类型是动态确定。Cython类型显式声明使其转为C代码成为可能,因为显式类型声明需要+。 有很多办法来测试、编译和发布 Cython 代码。...Cython 甚至可以像 Python 一样直接用于 Jupyter Notebook 。有很多办法来测试、编译和发布 Cython 代码。...如何使用Cython加速代码 我们要做第一件事是设置Python代码基准:用于计算数字阶乘for循环。...Cython代码运行了大概20毫秒,比之前Python循环快了大概 80倍。

1.7K41

Python老司机也会翻车!10个最容易犯Python开发错误

(一)滥用表达式作为函数参数默认值 Python允许开发者指定一个默认值给函数参数,虽然这是该语言一个特征,但当参数可变时,很容易导致混乱,例如,下面这段函数定义: 在上面这段代码里,一旦重复调用foo...在Python,类变量都是作为字典进行内部处理,并且遵循方法解析顺序(MRO)。在上面这段代码,因为属性x没有在类C中发现,它会查找它基类(在上面例子只有A,尽管Python支持多继承)。...然而,在Python 2.x,except Exception,e通常是用来绑定异常里 第二参数,好让其进行更进一步检查。...(五)修改遍历列表 下面这段代码很明显是错误: 在遍历时候,对列表进行删除操作,这是很低级错误。稍微有点经验的人都不会犯。...例如,在你代码可能有一个email.py模块,由于名称一致,它很有可能与Python自带标准库模块发生冲突。

1K80

Python 工匠:写好面向对象代码原则(

合理使用继承,可以大大减少类与类之间重复代码,让程序事半功倍,而不当继承关系,则会让类与类之间建立起错误强耦合,带来大片难以理解和维护代码。 正是因为这样,对继承态度也可以大致分为两类。...光说有点难理解,让我们用代码来看看一个在 Python 违反 Liskov 原则例子。 一个违反 L 原则样例 假设我们在为一个 Web 站点设计用户模型。...子类继承父类,然后重写父类少量行为,这看上去正是类继承典型用法。但不幸是,这段代码违反了“里氏替换原则”。具体是怎么回事呢?让我们来看看。...正确修改办法 既然为函数增加类型判断无法让代码变得更好,那我们就应该从别的方面入手。...看完文章你,有没有什么想吐槽

99010

他们说,这段代码你能看得懂她开始,却猜不中她结尾。

---- 好,现在回到我们主题,看下下面这段代码,你觉得它会输出几个#号呢? 这个问题来自于我们技术群里一位同学提问,为了给大家一个思考时间,我们先不说结果,先再看下另一位可爱小妹妹。...看到没,8个,不知道你有没有猜对呢? 可为什么是8个呢,你要说2个我能理解,3个我也能理解,为什么偏偏是这么夸张8个 ?...fork作用其实就是拷贝当前进程,然后创建一个原样子进程,子进程开始时执行代码,就是父进程调用fork之后代码。 对于我们上面的题目来说,子进程就是进入了下一次for循环。...其他因为主进程,或者是该子进程调用fork方法,创建进一步子进程再进入到for循环时,因为不满足 i < 2,会直接跳出循环,也就是说不会再输出#号。...再看下我们代码,算上主进程,一共创建了4个进程,那最终输出可不就是8个#号嘛。 小知识,大学问! 不知道你有没有猜中这样结尾呢?

34821

Python学习者文件读写指南(含基础与进阶,建议收藏)

2、如何从文件读取内容? 3、多样需求读写任务 4、从with语句到上下文管理器 如何将列表数据写入文件? 首先,我们来看看下面这段代码,并思考:这段代码有没有问题,如果有问题的话,要怎么改?...li = ['python',' is',' a',' cat'] with open('test.txt','w') as f: f.write(li) 现在公布答案,这段代码会报错: TypeError...所以,上面的例子,我们试试把 f.write(li) 改为 f.write(str(li)) ,先做一下字符串类型转化看看。代码略。...如果要实现列表元素间换行,一个办法是在每个元素后面加上换行符“\n”,如果不想改变元素,最好是用for循环,在写入时候加在末尾:for i in content: f.writelines(str...,既减少内存压力,又方便逐行对数据处理。

91030

Python 工匠:使用数字与字符串技巧

使用 enum 枚举类型改善代码 那么,怎么改善这段代码?最直接方式,就是为这两个条件分支添加注释。不过在这里,“添加注释”显然不是提升代码可读性最佳办法(其实在绝大多数其他情况下都不是)。...但是这样做最大问题在于:随着函数逻辑变得更复杂,这段拼接代码会变得容易出错、难以扩展。事实上,上面这段 Demo 代码也只是仅仅做到看上去没有明显 bug 而已 (谁知道有没有其他隐藏问题)。...这表示 Python 解释器在将源码编译成成字节码时,会计算 11 24 3600 这段整表达式,并用 950400 替换它。 所以,当我们代码需要出现复杂计算字面量时,请保留整个算式吧。...要改善它有很多种办法,比如我们可以把这段多行字符串作为变量提取到模块最外层。...,要足够谨慎,不要相信自己直觉 Python 语言更新非常快,不要被别人经验所左右 看完文章你,有没有什么想吐槽

62861

Python程序员最常犯十个错误,看完你自己都笑了

常见错误3:错误地指定异常代码块(exception block)参数 ---- 请看下面这段代码这段代码问题在于,except语句并不支持以这种方式指定异常。...在Python 2.x,需要使用变量e将异常绑定至可选第二个参数,才能进一步查看异常情况。...而且,列表解析式在避免这个问题方面尤其有用,下面用列表解析式重新实现上面代码功能: 常见错误6:不理解Python在闭包如何绑定变量 ---- 请看下面这段代码: 你可能觉得输出结果应该是这样:...常见错误7:模块之间出现循环依赖(circular dependencies) 假设你有两个文件,分别是a.py和b.py,二者相互引用,如下所示: a.py文件代码: b.py文件代码: 首先...下面这段代码就使用了这种方法,因此在Python 2和Python 3输出结果是一致: 在Python 3下运行代码: 太棒了!

1.1K40
领券