參考來源:Vitu.AIpython
簡單地回顧一下,上一節課咱們初步認識了列表(list)和元組(tuple),這兩個批量存儲數值的事物。程序員
這一節課咱們來學習一下循環(Loop),這是一種重複執行某些代碼的方法。咱們會了解到for和while兩種不一樣的循環,以及如何有效地利用列表解析,這一python的高級屬性。編程
首先,讓咱們來看一個例子,仍是咱們熟悉的列表planets:app
planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune'] for planet in planets: print(planet, end=' ') # 在同一行顯示所有行星的名字,以空格作間隔
從上面的例子裏總結一下,for循環須要指定兩個要素:編程語言
第一個要素是,要使用的變量名字 (在上面的代碼中,特指變量planet)函數
第二個要素是,要循環的範圍 (在上面的代碼中,特指列表planets[]
)oop
在上一節課,咱們講過in, 用來判斷一個數值是否在一個列表中。學習
而在for循環裏,in是咱們用鏈接上述兩個要素的關鍵詞。code
in左側的對象是第一個要素,in右側的對象是第二個要素,便是支持循環的任何對象。基本上,它能夠被認爲是一組東西,咱們能夠循環它。 對象
除了列表,咱們能夠循環元組,下面的代碼,至關於在幫咱們計算「2的6次方」是多少:
multiplicands = (2, 2, 2, 2, 2, 2) product = 1 for mult in multiplicands: product = product * mult product
一樣,咱們也能夠循環字符串裏的每個字母。
沒錯,上方的循環會顯示Hello World
,這個全部程序員都知道的,如何進入編寫代碼的世界的初始口令。
range()是咱們經常使用在循環裏的一個函數。 事實證實,它對編寫循環仍是很是有用的。
例如,若是咱們想重複一些動做3次:
for i in range(3): print("重要的事情要重複三遍. i =", i)
Python裏還有一種循環,叫作while循環。
和for的總體循環不一樣的是,while循環是直到某些條件被知足纔會被觸發循環。
讓咱們來看個例子:
i = 0 while i < 10: print(i, end=' ') i += 1
while循環裏的參數是對布爾值(booleans)的判斷,當這種循環的前提條件被判斷爲false時,循環就中止。
像上方的代碼中,當變量i等於10的時候,循環就中止。
列表解析/推導/生成器是Python最受歡迎和獨特的功能之一,這個功能充分利用了for循環。
讓咱們來看一個例子:
squares = [n**2 for n in range(10)] squares
上面的代碼簡潔明瞭地幫咱們羅列了0-9這十個數字的平方。
若是不使用這一特性,咱們該如何用python實現呢?
squares = [] for n in range(10): squares.append(n**2) squares
是的,正如上方的代碼所示,咱們得先建立一個空的列表,把for循環裏的每個值用list.append()添加到最初建立的列表裏。
咱們還能夠在列表解析裏添加if的條件判斷。用咱們熟悉的列表planets來舉個例子:
# 咱們須要名字小於6個字母的行星 short_planets = [planet for planet in planets if len(planet) < 6] short_planets
再看一個和if條件判斷並相關,並對列表裏的元素作了一些格式轉換的例子:
loud_short_planets = [planet.upper() + '!' for planet in planets if len(planet) < 6] loud_short_planets
上方的例子是否是看起來有點複雜?沒錯,由於正常人類都是一行一行得閱讀代碼。
讓咱們把上述的例子分行來看看:
[ planet.upper() + '!' for planet in planets if len(planet) < 6 ]
這樣,咱們想要作的三個操做就一目瞭然了,讓咱們按照對人類閱讀邏輯友好的順序來解讀:
一樣地,細心的你可能注意到上方的代碼沒有賦予一個列表來存儲循環的輸出結果。固然這種作法不是特別的常見。
讓咱們再來看一個相似操做的有趣的例子:
[32 for planet in planets]
是的,沒錯,在上方的代碼裏,列表解析被用於提供32這個數值出現的次數。
更有趣的是,列表推導與min(),max()和sum()等功能相結合,咱們能夠把須要多行代碼才能解決的問題用使人印象深入的單行代碼解決方案。
讓咱們一塊兒看一看同一個問題用python的三種不一樣解決方案:
須要解決的問題是:一組列表裏的負數有幾個?
# 方案一:不使用列表解析 def count_negatives(nums): """Return the number of negative numbers in the given list. >>> count_negatives([5, -1, -2, 0, 3]) 2 """ n_negative = 0 for num in nums: if num < 0: n_negative = n_negative + 1 return n_negative
# 方案二:使用解析列表 def count_negatives(nums): return len([num for num in nums if num < 0])
# 方案三:使用解析列表並使用`sum()` def count_negatives(nums): return sum([num < 0 for num in nums])
是否是看起來有一點複雜,不要緊,咱們這裏只是想展現python做爲編程語言的易讀,簡潔和使用的多樣性。
咱們會對這一門美妙的編程語言慢慢熟悉起來的。