本文将详细介绍解析公式的基本要素及其各种形式。Python中的解析解析是允许在其他序列中构建序列的结构。Python2.0引入了列表推导的概念,Python3.0进一步引入了字典和集合推导。Python中的解析类型为什么解析类型如此强大?本文将尝试通过示例来理解这一点。大家都知道Python提供了多种表达列表的方式。例如:整个事情可以明确地写成:squares=[0,1,4,9,25]或者,写一个for循环来创建一个列表:squares=[]fornuminrange(6):squares.append(num*num)另一种创建列表的方法是使用单行。squares=[num*numfornuminrange(6)]上面的这一行称为列表理解,是创建列表的一种便捷方法。它不再依赖循环并简化了代码。下一节将深入探讨列表的概念和Python3中可用的其他类型的理解。列表理解列表理解是一种在Python中以简洁的方式定义和创建列表的方法。大多数时候,列表推导式只需一行代码即可创建列表,而无需担心初始化列表或设置循环。列表推导包含以下部分:列表推导的每个部分例如,您需要找到前五个偶数的平方。如前一节所示,有两种方法可以做到这一点:使用显式for循环或使用列表理解。两种方式都试试。使用循环:even_squares=[]>>>fornuminrange(11):...ifnum%2==0:...even_squares.append(num*num)>>>even_squares[0,4,16,36,64,100]使用列表理解:even_squares=[num*numfornuminrange(11)ifnum%2==0]even_squares[0,4,16,36,64,100]如果你仔细观察,你会发现你可以创建列表理解。列表理解是Python中应用于集合的一种符号表示方法,就像数学中使用的集合表示方法一样。使用数学中集合的相似性来尝试一下,并查看一些在列表推导的帮助下创建列表的示例。创建一个毕达哥拉斯三元组一个毕达哥拉斯三元组由三个正整数a、b和c组成,并且a2+b2=c2。通常这样的三元组写成(a,b,c)的形式,例如(3,4,5)。[(a,b,c)forainrange(1,30)forbinrange(1,30)forcinrange(1,30)ifa**2+b**2==c**2][(3,4,5),(4,3,5),(5,12,13)??,(6,8,10),(7,24,25),(8,6,10),(8,15,17),(9,12,15),(10,24,26),(12,5,13),(12,9,15),(12,16,20),(15,8,17),(15,20,25),(16,12,20),(20,15,25),(20,21,29),(21,20,29),(24,7,25),(24,10,26)]带有字符串的列表理解将字符串中的小写字母转换为大写字母。colors=["pink","white","blue","black",purple"][color.upper()forcolorincolors]['RED','GREEN','BLUE','PURPLE']交换给出的列表中的名字和姓氏。presidents_usa=["GeorgeWashington","JohnAdams","ThomasJefferson","JamesMadison","JamesMonroe","JohnAdams","AndrewJackson"]split_names=[name.split("")fornameinpresidents_usa]swapped_list=[split_name[1]+""+split_name[0]forsplit_nameinsplit_names]swapped_list['WashingtonGeorge','AdamsJohn','JeffersonThomas','MadisonJames','MonroeJames','AdamsJohn','JacksonAndrew']包含元组的列表理解公式ifexpressionContainstuples(例如(x,y)),它们必须括在括号中。#ConvertheightfromcmstofeetusingListComprehension:1cm=0.0328feetheight_in_cms=[('Tom',183),('Daisy',171),('Margaret',179),('Michael',190),('Nick',165)]height_in_feet=[(height[0],round(height[1]*0.0328,1))forheightinheight_in_cms]height_in_feet[('Tom',6.0),('Daisy',5.6),('Margaret',5.9),('Michael',6.2),('Nick',5.4)]嵌套列表推导列表推导也可以嵌套以创建复杂列表。例如,可以仅使用列表推导来构建矩阵。构造一个3x3矩阵:matrix=[[j*j+iforjinrange(3)]foriinrange(3)]matrix[[0,1,4],[1,2,5],[2,3,6]]Set理解集理解类似于列表理解,但返回集合而不是列表。在使用花括号而不是方括号来创建集合推导的意义上,语法略有不同。考虑包含以下名称的列表:names=['Arnold','BILL','alice','arnold','MARY','J','BIll','maRy']此列表包含许多重复项,并且有些名字只有一个字母。我目前想要的是一个比一个字母长的名字列表,只有第一个字母大写。为了完成这项任务,采用了集合分析公式。{name.capitalize()fornameinnamesiflen(name)>1}{'Alice','Arnold','Bill','Mary'}dictionaryparse{}当输入为字典或键值对形式时,使用字典解析。例如,考虑一个字典,其中键代表字符,值代表这些字符在语料库中出现的次数。char_dict={'A':4,'z':2,'D':8,'a':5,'Z':10}字典char_dict由大小写字母组成。这里我们要计算字母的总出现次数,不管它们是大写还是小写。本文使用字典分析来达到这个目的:{k.lower():char_dict.get(k.lower(),0)+char_dict.get(k.upper(),0)forkinchar_dict.keys()}{'a':9,'z':12,'d':8}生成器推导()列表推导是列表,因为生成器表达式是生成器。生成器函数一次输出一个给定序列的值,而不是一次输出所有值。这是一篇很好的文章,解释了Python中生成器的细节。生成器理解语法和工作就像列表理解一样,除了它们使用圆括号而不是方括号。假设你想计算前十个自然数的平方和。#SumofirsttennaturalnumbersusingListComprehensionsum([num**2fornuminrange(11)])385如果我们使用任何其他可迭代对象不一定是列表,结果将是相同的。sum({num**2fornuminrange(11)})385现在,如果您使用生成器解析对前十个自然数求平方,它将如下所示:squares=(num**2fornuminrange(11))squaressquares
