当前位置: 首页 > 后端技术 > Python

Python循环、判断和各种表达式(长篇系列的第二篇)

时间:2023-03-26 14:29:12 Python

流程控制是python语法中非常重要的一个分支,主要包括我们经常使用的判断语句、循环语句和各种表达式,这就是为什么前面的文章没有介绍表达式。本文将对这三个方面的基础知识进行更加系统全面的讲解。判断语句(if)最著名的判断语句应该是if-else的组合,这种格式在很多语言中都是通用的,但是对于elif,不同语言的表达形式可能不同:在[1]中:x=5In[2]:ifx>0:...:print('positiveinteger')...:elifx<0:...:print('negativeinteger')...:else:。..:print('zero')...:正整数一组判断语句可能有零个或多个elif部分,else可选。关键字elif是elseif的缩写,因为python对缩进有严格的要求,而这种写法恰好可以有效避免过度缩进。if...elif...elif...序列用于代替其他语言中的switch或case语句。循环语句1.for循环如果你最熟悉的是C语言,那么要注意for语句在python和C语言中的表达方式完全不同。Python的for语句按照项目在序列中出现的顺序迭代任意序列(字符串、列表)中的项目。In[3]:str1='mao'In[4]:foriinstr1:...:print(i)...:mao对list的循环和string差不多,只是sub-项目不同。在[5]中:list1=['a','aa','aaa']在[6]中:foriinlist1:...:print(i,len(i))...:a1aa2aaa3for语句和range函数的组合是一种很常见的组合。范围函数主要提供一系列值。In[8]:forjinrange(len(list1)):...:print(j,list1[j])...:0a1aa2aaarange提供的数值索引方法可以参考list的slice,这也是默认的,它以0开头,不包括最后一位。上面的情况,用enumerate()函数来表达会更简单。In[9]:fori,vinenumerate(list1):...:print(i,v)...:0a1aa2aaa2,whilestatementIn[10]:i=1In[11]:list2=[]In[12]:whilei<=5:...:list2.append(i)...:i+=1In[14]:list2Out[14]:[1,2,3,4,5]3、break、continue、passbreak语句的作用是跳出一个for或while循环。In[15]:foriinrange(0,5):...:ifi==3:...:break...:else:...:print(i)012在for中可以看到循环中加入判断语句。当i等于3时,会跳出for循环,不再继续执行。输出与语义一致。continue语句的作用是继续执行下一次迭代,可以和判断语句结合使用,在什么条件下继续执行,或者在什么条件下跳出循环。In[20]:foriinrange(2,7):...:ifi%2==0:...:print('Anevennumber',i)...:continue...:ifi>4:...:print('beyond4')...:break...:Anevennumber2Anevennumber4beyond4pass语句主要起到占位符的作用,有些语句不能为空,比如asif,for,while,可以用pass占位,不会报错。In[1]:whileTrue:...:passiterators,generators我们平时接触到的迭代器都是有序列的,比如字符串,列表等,使用iter()方法构建迭代器并匹配它next()方法可以迭代并返回迭代器中的值,并将返回值弹出迭代器。In[1]:it=iter('python')In[2]:print(it)In[3]:next(it)Out[3]:'p'In[4]:next(it)Out[4]:'y'当next方法迭代到最后一个值时,如果继续调用next方法,会弹出错误。当然你也可以使用for循环来迭代输出:In[6]:foriinit:...:print(i)thon如果你对Python有深入的了解,你会发现generators更多使用方便,只需组合功能。生成器的关键字是yield,生成器还有一个next()方法,可以使用for循环迭代输出。在[8]中:defreverse(data):...:foriinrange(len(data)-1,-1,-1):...:yielddata[i]In[9]:gen=reverse('mao')In[10]:print(gen)In[11]:next(gen)Out[11]:'o'In[12]:foriingen:。..:print(i)am括号中的表达式可用于创建生成器。下面将介绍如何编写各种表达式。In[14]:gen2=(iforiinrange(0,5))In[15]:print(gen2)at0x00000187ADA18D60>ExpressionListExpression各种表达式创建相关的数据类型提供了一个更简单的方法,从列表表达式开始,常见的方法是通过对序列的每个成员应用一些操作从返回的元素创建一个列表,或者从满足特定条件的元素创建子序列。比如我们要获取一个10以内的平方数,常用的方法如下:In[16]:squares=[]In[17]:foriinrange(10):...:squares.append(i**2)In[18]:squaresOut[18]:[0,1,4,9,16,25,36,49,64,81]但是一行语句足以涵盖以上内容,显示列表表达式的简单性。在[20]中:squares=[x**2forxinrange(10)]在[21]中:squaresOut[21]:[0,1,4,9,16,25,36,49,64,81】上面的列表表达式应??该比较简单,我们也可以在表达式中加入判断语句作为过滤条件。In[22]:list2=[x*2forxinrange(10)ifx*2>3]In[23]:list2#0and2arefilteredOut[23]:[4,6,8,10,12,14,16,18]此外,两个列表的元素可以组合形成一个列表表达式:In[24]:list3=[(x,y)forxin[1,2]foryin[2,3]ifx!=y]In[25]:list3Out[25]:[(1,2),(1,3),(2,3)]比较复杂的列表表达式是嵌套类型是的,但是这样的表达式的缺点是可读性不是很好,因为你需要考虑他的一些细节,比如把一个23矩阵转换成32矩阵。在[28]中:mat=[[1,2,3],[4,5,6]]在[29]中:list3=[[row[i]forrowinmat]foriinrange(3)]In[31]:list3Out[31]:[[1,4],[2,5],[3,6]]集合表达式和列表表达式有两点不同:1.集合表达式需要使用{}2、set表达式返回一个集合,所以元素会被去重In[32]:set1={iforiin'abcdddddd'ifinotin'abc'}In[33]:set1Out[33]:{'d'}可以看到for语句中的字符串本来有很多个d,经过条件过滤和set去重后,只剩下一个了。当然,你也可以通过set()方法将列表表达式转化为集合形式。在[34]中:set2=set([(x,y)forxinrange(2)foryinrange(2)])In[35]:set2Out[35]:{(0,0),(0,1),(1,0),(1,1)}字典表达式字典是python中非常常用的一种数据类型,所以字典表达式也显得尤为重要。字典表达式也是用{}构造的,但表达式也使用(键值对)的形式。In[36]:dict1={x:x**2forxinrange(1,4)}In[37]:dict1Out[37]:{1:1,2:4,3:9}字典表达式你还可以结合一些方法和语句来实现更多的功能。在[38]中:dict2={x:len(x)forxin['aa','bb','ccc']}在[39]中:dict2Out[39]:{'aa':2,'bb':2,'ccc':3}使用items()方法很容易实现键值对的转换,但是需要注意的是字典的key需要唯一。In[40]:dict3={v:kfork,vindict2.items()}In[41]:dict3Out[41]:{2:'bb',3:'ccc'}通过上面几个例子可以看出,一个表达式是由包含一个表达式的括号组成,后面是一个for语句,再后面是零个或多个for或if语句,结果最终会返回一个指定的数据类型,其中的元素是通过表达式计算出来的在随后的for和if语句中。

最新推荐
猜你喜欢