首页 > 编程语言 >一道Python初学者常犯错误解析

一道Python初学者常犯错误解析

时间:2023-05-01 10:33:42浏览次数:46  
标签:11 nums Python 代码 生成器 列表 犯错误 num 初学者

1. 引言

在Python学习中,经常会遇到各种各样的代码错误,尤其对于初学者而言,明明觉得逻辑上是对的,但是代码运行起来,往往不是自己想要的结果。

本文就最近在某平台看到的一个常见错误进行展开,帮助大家更好的理解Python的基础语法,,闲话少说,我们直接开始吧!

2. 问题描述

首先,我们来检查以下代码,看看其中是否有问题?该代码的目的是删除列表中的偶数。

一道Python初学者常犯错误解析_Python

思考两分钟,你认为上述代码的运行结果会是什么? [1, 7, 11] 是我们所希望输出的,上述代码看起来似乎也没有问题。但是上述代码的运行结果是[1, 7, 8, 11],这里的数字8哪里来的?

3. 问题解析

上述代码输出包括数字8,是因为代码在遍历列表时会从列表中删除元素,会导致列表发生变化。我们修改上述代码,将每次for循环中的临时变量都进行输出,代码如下:

def remove_even(nums):
	for i,num in enumerate(nums):
		print("i={} num={}".format(i,num))
		if num%2==0:
			del nums[i]

nums=[1,2,7,4,8,11]
remove_even(nums)
print(nums)

运行结果如下:

i=0 num=1
i=1 num=2
i=2 num=4
i=3 num=11
[1, 7, 8, 11]

上述运行过程如下:

  • i=0时,此时num=1,不满足偶数判断,结束本次循环。
  • i=1时,此时num=2,满足偶数判断,此时删除nums[1],则此时列表将变化为[1,7,4,8,11]
  • i=2时,此时num=4,满足偶数判断,此时删除nums[2],则此时列表将变化为[1,7,8,11];
  • i=3时,此时num=11,不满足偶数判断,循环结束。最后列表变为[1,7,8,11]

4. 解决方案一

为了避免这个问题,最好创建一个新的列表只用来存储不满足条件语句的元素,而不是在迭代时修改原始列表。例如:

一道Python初学者常犯错误解析_Python_02

上述代码运行后将会输出[1,7,11],这就时我们所希望的结果。当然还有其他更优雅的实现方式。

5. 解决方案二

yield是Python中的一个关键字,用于定义生成器函数。生成器是一种特殊类型的函数,可以用来动态生成一系列值,而不是像常规函数那样一次返回所有值。当在生成器函数中执行yield语句时,它会暂时挂起函数的执行,并通过yield关键字返回表达式的值。函数并没有终止,而是处于挂起状态,后续可以继续从挂起的地方恢复。

yield关键字实现上述功能的样例代码如下:

一道Python初学者常犯错误解析_Python_03

在这段代码中,remove_even是一个生成器函数,它从输入的列表numbers中每次产生一个奇数。然后使用list()构造函数将remove_even返回的生成器对象转换成列表。使用生成器还允许对大的或无限的数据序列进行更灵活和存储器高效的处理。

6. 总结

本文重点介绍了在Python中删除列表元素时初学者容易犯的低级错误,并针对性的提出了两种解决方法,可以更加灵活和高效的处理更大规模的数据列表。

嗯嗯,您学废了嘛?

标签:11,nums,Python,代码,生成器,列表,犯错误,num,初学者
From: https://blog.51cto.com/u_15506603/6238614

相关文章

  • python 文件目录处理(os模块)
    在Python3中,您可以使用os模块来执行文件和目录操作。下面是一些常见的文件和目录操作及其示例:新建目录要在Python3中新建一个目录,请使用os.mkdir()方法,并将要创建的目录的路径作为参数传递给它。例如:importosos.mkdir('/path/to/new/folder')这将在指定的路径/path/t......
  • python 类与对象
    在Python中,类是一种用户自定义的数据类型,代表着一组具有相同属性和方法的对象。属性是类或实例所拥有的变量,用于描述该对象的特征或状态。一个生活中的例子可以是汽车制造。汽车制造过程中,我们需要设计一个Car类,这个类包含属性(例如颜色,品牌,车型等)和方法(例如启动引擎,前进,刹车等)。......
  • 【python】if __name__=='__main__'
    当我们想一个python文件作为脚本直接执行时才执行某段代码,而被其他python文件调用时不执行那段代码,就可以通过if__name__=='__main__'实现。if__name__=='__main__'只有在python文件作为脚本执行时才为True。python文件直接执行时__name__值为'__main__',被别的文件调用......
  • Python 3 alias All In One
    Python3aliasAllInOnepython3/py3/python#$vim.zshrc$code.zshrc$source~/.zshrc$py3--versionPython3.9.6$python--versionPython3.9.6$python3--versionPython3.9.6$whichpy3py3:aliasedtopython3$whichpythonpython......
  • python操作MongoDB数据库
    python处理mongodb首选就是pymongo.首先,安装一下这个模块pipinstallpymongo建立连接importpymongoconn=pymongo.MongoClient(host='localhost',port=27017)#切换数据库py=conn['python']#登录该数据库(需要的话)py.authenticate("python_admin",'......
  • python 列表推导式
    Python列表推导式是一种简洁而强大的语法结构,可以让你更快地创建、转换和过滤Python列表。它在Python中非常常用,并且是Python程序员必须掌握的技能之一。具体而言,列表推导式是使用一行代码创建新列表的方法。这个代码行由三部分组成:表达式、迭代器和可选的过滤器。表达式是一个......
  • python 文件操作(csv和excel大型文件读取)
    使用csv模块首先,我们需要导入csv模块:importcsv读取CSV文件要读取一个CSV文件,可以使用csv.reader()函数。该函数接受一个文件对象作为参数,并返回一个可迭代的行列表。每一行都是一个由列数据组成的列表。例如,如果我们有一个名为data.csv的CSV文件,其中包含以下内容:Name,Age......
  • python 文件操作
    在Python3中,进行文件操作的主要方式是使用内置的open()函数。该函数接受一个文件名和一个模式参数,并返回一个文件对象,我们可以在该对象上执行读取或写入操作。以下是一些常见的文件操作及其示例:打开文件我们可以使用open()函数打开一个文件并获得文件对象。例如,以下代码......
  • python 模块及引用
    在Python中,模块是一种组织代码的方式。它允许我们将相关的函数、类和变量放在一个文件中,并通过导入该文件来使用其中的代码。Python自带了很多常用的模块,同时我们也可以编写自己的模块。要调用一个模块,我们需要使用import语句。例如,如果我们想使用Python标准库中的math模块,可......
  • Python 斐波那契数列
    概念:斐波那契数列又称黄金分割数列,即:1,1,2,3,5,8,13,21,…,这个数列前两项都是1,从第3项开始,每一项都等于前两项之和。随着数列的增加,前一项与后一项的比值逼近0.6180339887这个黄金分割系数 code:deffiblist(input):fib=[1,1]#第一和第二项固定为值为1......