当前位置: 首页 > 科技观察

关于Python中的列表推导

时间:2023-03-13 09:12:45 科技观察

列表推导在Python中通常用于编写单行语句,通过迭代可迭代对象来创建新列表或字典。本文将首先解释for循环在Python中的工作原理,然后解释如何在Python中使用列表理解。Python中的for循环Python中的for循环语句按顺序遍历任何对象、列表、字符串等的成员。与其他编程语言相比,它的语法更加简洁,无需手动定义迭代步骤和开始迭代。虽然有办法让它表现得像其他编程语言一样(本文不做详细讨论)。您还可以通过使用continue、break、pass等语句来对for循环进行一些控制。这是Python中for循环的一个简单示例:forxinrange(10):print(x)forxinrange(10):print(x)上面的for循环将输出从0到9的十个数字。下面的列表理解示例将创建一个名为[0,1,2,3,4,5,6,7,8,9]的新列表,其中包含所有“x”值。numbers=[xforxinrange(10)]print(numbers)numbers=[xforxinrange(10)]print(numbers)请注意,列表理解总是创建一个新列表,并且不会修改表达式中使用的原始可迭代对象。典型的列表推导式表达式必须有一个“for”子句,并且后面可以跟有“if”和“else”条件语句。如果不使用列表理解,上面的例子将写成如下:numbers=[]forxinrange(10):numbers.append(x)print(numbers)numbers=[]forxinrange(10):numbers.append(x)print(numbers)性能和可读性列表理解比for循环更快。但是,除非您迭代数万个项目,否则您不会注意到性能有显着提高。尽管列表推导式提供了一种简洁的方式来编写循环,但复杂的表达式可能会导致代码的可读性和冗长性降低。除非您的程序需要最高性能,否则保持代码的可读性很重要。示例:对字典和集合使用列表理解语法Python字典是以键值对定义的元素的集合,而集合是不允许重复的唯一值的集合。列表推导也可以与Python字典和集合一起使用。语法略有不同,您现在必须使用大括号而不是将表达式括在方括号中。您还将获得一个新的字典/集合对象,而不是一个新列表。data={"city":"newyork","name":"johndoe"}formatted_data={k:v.title()fork,vindata.items()}print(formatted_data)data={"city":"newyork","name":"johndoe"}formatted_data={k:v.title()fork,vindata.items()}print(formatted_data)上面的示例将字符串值转换为标题大小写并创建一个名为Anewdictionary的文件“格式化数据”的输出为:{'city':'NewYork','name':'JohnDoe'}。您还可以通过在左侧指定现有字典变量来更改字典/就地设置。data={"city":"newyork","name":"johndoe"}data={k:v.title()fork,vindata.items()}print(data)data={"city":"newyork"","name":"johndoe"}data={k:v.title()fork,vindata.items()}print(data)如果不使用字典理解,代码将如下所示:data={"city":"newyork","name":"johndoe"}formatted_data={}fork,vindata.items():formatted_data[k]=v.title()print(formatted_data)data={"city":"newyork","name":"johndoe"}formatted_data={}fork,vindata.items():formatted_data[k]=v.title()print(formatted_data)因为集合中没有键值对,它可以遵循相同的列表理解方式来定义集合理解。唯一的区别是使用大括号。示例:列表理解中的多个For循环上面提到的列表理解示例是基本的,使用单个“for”语句.下面是一个使用多个for循环和条件“if”语句的示例。adjectives=["Disco","Eoan","Focal","Artful"]animals=["Dingo","Ermine","Fossa","Beaver"]codenames=[x+""+yforxinadjectivesforyinanimalsify.startswith(x[0])]print(codenames)adjectives=["Disco","Eoan","Focal","Artful"]animals=["Dingo","Ermine","Fossa","Beaver"]codenames=[x+""+yforxinadjectivesforyinanimalsify.startswith(x[0])]print(codenames)此代码将显示['DiscoDingo','EoanErmine','FocalFossa']作为输出。两个for循环遍历“形容词”和“动物”列表,当两个词的首字母相同时,它们的成员用空格连接在一起。如果不使用列表理解,代码将如下所示:adjectives=["Disco","Eoan","Focal","Artful"]animals=["Dingo","Ermine","Fossa","Beaver"]codenames=[]forxinadjectives:foryinanimals:ify.startswith(x[0]):codenames.append(x+""+y)print(codenames)adjectives=["Disco","Eoan","Focal","Artful"]animals=["Dingo","Ermine","Fossa","Beaver"]codenames=[]forxinadjectives:foryinanimals:ify.startswith(x[0]):codenames.append(x+""+y)print(代号)示例:带if-else子句的列表推导下面的示例将显示if和else语句在列表推导中的用法。number_list=[1,2,3,4]another_list=[5,6,7,8]result=[Trueif(x+y)%2==0elseFalseforxinnumber_listforyinanother_list]print(result)number_list=[1,2,3,4]another_list=[5,6,7,8]result=[Trueif(x+y)%2==0elseFalseforxinnumber_listforyinanother_list]print(result)遍历两个列表时,上面的列表推导检查是否对元素求和是偶数。运行上面的代码将显示[True,False,True,False,False,True,False,True,True,False,True,False,False,True,True,False,True]作为输出。如果不使用列表理解,代码将如下所示:number_list=[1,2,3,4]another_list=[5,6,7,8]result=[]forxinnumber_list:foryinanother_list:if(x+y)%2==0:result.append(True)else:result.append(False)print(result)number_list=[1,2,3,4]another_list=[5,6,7,8]result=[]forxinnumber_list:foryinanother_list:if(x+y)%2==0:result.append(True)else:result.append(False)print(result)结论列表理解提供了一种编写简洁循环语句的好方法。但是,如果使用多个循环和条件语句,它们很快就会变得复杂且难以理解。最终,它让程序员更自在,但通常编写明确、可读且更易于调试的代码总比过多使用速记要好。