【Python】Python的判断、循环和各种表达式(长文系列第②篇)
流程控制是python語法很重要的一個分支,主要包括我們經常用到的判斷語句、循環語句以及各種表達式,這也是上一篇文章沒有介紹表達式的原因,在這篇文章中會更加系統全面的講解這三方面的基礎知識。
判斷語句(if)
判斷語句中最有名的應該就是if-else的組合,并且很多語言都通用這種格式,但是對于elif而言,不同語言表達形式可能會不同:
In?[1]:?x?=?5 In?[2]:?if?x>0:...:?????print('正整數')...:?elif?x<0:...:?????print('負整數')...:?else:...:?????print('零')...: 正整數一組判斷語句可能會有零到多個 elif 部分,else 是可選的。關鍵字 elif ?是 else if 的縮寫,由于python對縮進的要求很嚴格,而這種寫法恰巧可以有效地避免過深的縮進。if ... elif ... elif ... 序列用于替代其它語言中的 switch 或 case 語句。
循環語句
1、for循環
如果C語言是你最熟悉的需要,要注意python和C語言中的for語句表達形式完全不同。Python 的 for 語句依據任意序列(字符串、列表)中的子項,按照它們在序列中的順序來進行迭代。
In?[3]:?str1?=?'mao'In?[4]:?for?i?in?str1:...:?????print(i)...: m a o對列表的循環與字符串幾乎一致,只是子項不同。
In?[5]:?list1?=?['a','aa','aaa'] In?[6]:?for?i?in?list1:...:?????print(i,len(i))...: a?1 aa?2 aaa?3for語句與range函數結合是一種很常見的組合,range函數主要提供一個數值序列。
In?[8]:?for?j?in?range(len(list1)):...:?????print(j,list1[j])...: 0?a 1?aa 2?aaarange提供的數值索引方式可以參考列表的切片,同樣默認以0開始,且不包括最后一位,上面這種場合利用enumerate()函數表達會更加簡單。
In?[9]:?for?i,v?in?enumerate(list1):...:?????print(i,v)...: 0?a 1?aa 2?aaa2、while語句
In?[10]:?i?=?1 In?[11]:?list2?=?[] In?[12]:?while?i<=5:...:?????list2.append(i)...:?????i+=1 In?[14]:?list2 Out[14]:?[1,?2,?3,?4,?5]3、break、continue、pass
break語句的作用就是用來跳出一個for或while循環。
In?[15]:?for?i?in?range(0,5):...:?????if?i?==?3:...:?????????break...:?????else:...:?????????print(i) 0 1 2可以看到在for循環中加了一個判斷語句,當i等于3時會跳出for循環,不再繼續執行,輸出與語義符合。
continue語句的作用就是表示繼續執行下一次迭代,可以結合判斷語句使用,在什么條件下繼續執行,或者什么條件下跳出循環。
In?[20]:?for?i?in?range(2,7):...:?????if?i%2==0:...:?????????print('An?even?number',i)...:?????????continue...:?????if?i>4:...:?????????print('beyond?4')...:?????????break...: An?even?number?2 An?even?number?4 beyond?4pass語句主要起到一個占位的作用,而有的語句后面是不能為空的,比如if、for、while,可以利用pass占位,不會發生報錯。
In?[1]:?while?True:...:?????pass迭代器、生成器
我們通常接觸到的迭代器有序列,比如字符串、列表等等,利用iter()方法可以構建一個迭代器,與之匹配的next()方法可以迭代返回迭代器內的值,并將返回值彈出迭代器。
In?[1]:?it?=?iter('python') In?[2]:?print(it) <str_iterator?object?at?0x00000187ADA75A00>In?[3]:?next(it) Out[3]:?'p' In?[4]:?next(it) Out[4]:?'y'當next方法迭代到最后一個值時,繼續調用next方法會彈出報錯。當然也可以利用for循環迭代輸出:
In?[6]:?for?i?in?it:...:?????print(i) t h o n如果你深入了解Python之后會發現生成器用起來會更加方便,結合函數即可。生成器的關鍵字為yield,生成器也具有next()方法,并且可以利用for循環迭代輸出。
In?[8]:?def?reverse(data):...:?????for?i?in?range(len(data)-1,-1,-1):...:?????????yield?data[i] In?[9]:?gen?=?reverse('mao') In?[10]:?print(gen) <generator?object?reverse?at?0x00000187AD99FDD0>In?[11]:?next(gen) Out[11]:?'o' In?[12]:?for?i?in?gen:...:?????print(i) a m用小括號括起來的一個表達式可以用來創建一個生成器,下面將講述如何來書寫各種的表達式。
In?[14]:?gen2?=?(i?for?i?in?range(0,5))In?[15]:?print(gen2) <generator?object?<genexpr>?at?0x00000187ADA18D60>表達式
列表表達式
各種表達式為我們創建相關數據類型提供了一種更加簡單的方法,首先是列表表達式,普通的方法是通過將一些操作應用于序列的每個成員并通過返回的元素創建列表,或者通過滿足特定條件的元素創建子序列。比如我們想獲取10以內的平方數,利用普通方法如下:
In?[16]:?squares?=?[] In?[17]:?for?i?in?range(10):...:?????squares.append(i?**?2)In?[18]:?squares Out[18]:?[0,?1,?4,?9,?16,?25,?36,?49,?64,?81]但一行語句就足以囊括上面的內容,可見列表表達式的簡潔性。
In?[20]:?squares?=?[x**2?for?x?in?range(10)]In?[21]:?squares Out[21]:?[0,?1,?4,?9,?16,?25,?36,?49,?64,?81]上面這個列表表達式應該是比較簡單的,我們還可以在表達式中加入判斷語句作為篩選條件。
In?[22]:?list2?=?[x*2?for?x?in?range(10)?if?x*2>3]In?[23]:?list2#0和2被過濾掉了 Out[23]:?[4,?6,?8,?10,?12,?14,?16,?18]進一步可以結合兩個列表的元素組成一個列表表達式:
In?[24]:?list3?=?[(x,y)?for?x?in?[1,2]?for?y?in?[2,3]if?x!=y]In?[25]:?list3 Out[25]:?[(1,?2),?(1,?3),?(2,?3)]在復雜一點的列表表達式就是嵌套類型的,但是這樣的表達式缺點就是可讀性不太好,因為你需要去思考他的一些細節,比如將一個23的矩陣轉變為32的矩陣。
In?[28]:?mat?=?[[1,2,3],[4,5,6]] In?[29]:?list3?=?[[row[i]?for?row?in?mat]?for?i?in?range(3)]In?[31]:?list3 Out[31]:?[[1,?4],?[2,?5],?[3,?6]]集合表達式
集合表達式與列表表達式有兩處不同:
1、集合表達式需要用{}
2、集合表達式返回的是集合,所以會對元素去重
可以看到for語句中的字符串原本有很多d,經過條件過濾和集合去重最后只剩下了一個。
當然也可以通過set()方法將一個列表表達式轉換為集合的形式。
In?[34]:?set2?=?set([(x,y)?for?x?in?range(2)?for?y?in?range(2)])In?[35]:?set2 Out[35]:?{(0,?0),?(0,?1),?(1,?0),?(1,?1)}字典表達式
字典是python中很常用的一種數據類型,所以字典表達式也顯得尤為重要。字典表達式同樣也用{}構建,只不過表達式還要用(key:value對)的形式。
In?[36]:?dict1?=?{x:x**2?for?x?in?range(1,4)} In?[37]:?dict1 Out[37]:?{1:?1,?2:?4,?3:?9}字典表達式也可以結合一些方法、語句實現更多的功能。
In?[38]:?dict2?=?{x:len(x)?for?x?in?['aa','bb','ccc']} In?[39]:?dict2 Out[39]:?{'aa':?2,?'bb':?2,?'ccc':?3}利用items()方法很容易實現鍵值對轉換,不過需要注意字典的鍵需要唯一。
In?[40]:?dict3?=?{v:k?for?k,v?in?dict2.items()} In?[41]:?dict3 Out[41]:?{2:?'bb',?3:?'ccc'}通過上面幾個例子可以看到,表達式是由包含一個表達式的括號組成,表達式后面會跟一個for語句,之后還可以跟零或者多個for或if語句,結果最終會返回一個指定的數據類型,其中的元素是通過表達式依據后面的for和if語句計算而得出的。
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯黃海廣老師《機器學習課程》課件合集 本站qq群851320808,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【Python】Python的判断、循环和各种表达式(长文系列第②篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git Permission to f
- 下一篇: websocket python爬虫_p