目錄
一、Python中的for循環
1、for循環語句的聲明。
2、for循環縮進常見問題?
?二、數字列表
1、函數range()?
2、使用range()函數創建數字列表?
3、使用一系列函數處理數字列表(統計)?
4、列表解析(生成列表的簡潔方法)
一、Python中的for循環
1、for循環語句的聲明。
在列表中,我們經常遍歷列表中的所有元素,并對每個元素執行相同的操作,那么這就可以使用for循環來實現。用如下代碼介紹for循環的用法:
magicicans=["alice","david","carolina"]
for magicican in magicicans: #讓Python從magicians中取出一個名字,并存儲在magician中print(magicican) #打印magician中儲存的名字
上述代碼首先定義了一個magician的列表,里面有三個人的名字,然后才使用for循環進行了一個操作。
"for magician in magicians:"這行代碼的用法實際上是“for A?in B:”。B是一個列表,A是一個用來存儲列表元素的臨時變量,而本行代碼的意思是:讓Python從列表B中按照先后順序依次取出其中的元素,并賦值給A元素,進行接下來的操作(這個操作將會對列表中的每一個元素,都將執行)。其中的“A”可以任意取名,但是“B”一定要和所遍歷的列表名稱一致。
? ? ? ? ? ? ? ? ? ? ? ? ? “for magician in magicians:”
Tip:編寫循環時,用于存儲列表元素的臨時變量可指定任何名稱。但是,選擇描述單個列表元素的有意義的名稱大有幫助。例如小貓列表、小狗列表和一般性列表,像如下編寫for循環的第一行代碼是不錯的選擇:有助于你明白for循環中將對每個元素執行的操作。使用單復數形式明存,有助于你判斷代碼處理的是單個列表元素還是整個列表。
for cat in cats:
for dog in dogs:
for item in list_of_items:
?在Python中不使用大括號來標明哪些操作要循環進行,取而代之的是相應代碼的縮進,在for循環語句的后面,每一行縮進的代碼都是循環的一部分。下圖紅框圈主的就是“縮進”。而在for循環后面的沒有縮進的代碼只執行一次,而不會重復執行!
2、for循環縮進常見問題?
python根據縮進來判斷代碼行與前一個代碼行的關系,并且通過使用縮進讓代碼更易讀,所以在開始編寫代碼時必須正確縮進代碼!
A、忘記縮進:例如循環語句后的代碼忘記縮進,在會提示“expected an indented”
B、忘記縮進額外的代碼行:例如本來需要循環執行的代碼有兩行,但卻只縮進了一行代碼!這是一個邏輯錯誤,語法上是合法的,但是由于存在邏輯錯誤,運行代碼之后得到的結果并不符合預期。
C、無循環時的不必要的縮進。例如沒有循環語句,但是卻縮進了某一行代碼,Python會報錯“unexpected indent”?。
D、有循環時不必要的縮進。這也是一個邏輯錯誤,如果不小心縮進了應在循環結束后執行的代碼,這些代碼將針對每個列表元素重復執行。
E、在for語句后忘記了冒號。這個冒號對于for循環來說至關重要:告訴Python解釋器下一行縮進的代碼是循環的第一行代碼。
?二、數字列表
? ? ? ?之前學習過列表,里面存儲的是字符串,而今天將要介紹的列表是“數字列表”。顧名思義,數字列表就是列表中存儲數字!而且列表中非常適合存儲數字集合!下面開始介紹一些關于數字列表的函數和操作。
1、函數range()?
? ? ? ?range單詞的意思是“范圍”,說到這,想必大家對這個函數的功能就不那么陌生了。range()函數的功能正如“range”的意思一樣:能生成某個范圍內的數字。如下示例代碼:
for value in range(1,5):#上一節課提到的循環語句,value存儲range函數生成的4個數字print(value)
? ? ? ?細心的同學發現,這兩行代碼中生成的數字應該是1-5的5個數字,為什么只有1-4的4個數字呢??
這個就是我們需要注意的地方了:因為此處和我們的傳統認知不一致。range()函數的具體功能是讓Python從你指定的第一個值開始,并在指定的第二個值后停止,自然不包含第二個數字了。如range(1,5)從1開始,到5之前就停止了,所以輸出的是1,2,3,4!!!
2、使用range()函數創建數字列表?
? ? ? ?將剛才學的數字列表和range()函數結合起來,使用另一個list()函數將range()生成的數字直接轉換成數字列表。示例代碼:
numbers=list(range(1,6))#將rang()函數作為list()函數的參數,實現數字轉為列表的功能
print(numbers)#打印生成的數字列表
? ? ?這是“數字”轉“數字列表”的初體驗,數字的間隔是“1”。當然可以通過指定range()函數的參數來確定間隔。示例代碼如下所示:
numbers=list(range(1,10,2))#將rang()函數作為list()函數的參數,實現數字轉為列表的功能
print(numbers)#打印生成的數字列表
?
? ? ? ?上述代碼,即為從1到10,以2為間隔,最終的數字列表為“1,3,5,7,9”?
既然學到這里了,我們用一道題目來測試一下我們對range()函數、for循環以及乘方的掌握程度:
題目大意:創建一個數字列表,其中包含前10個整數(即1~10)的平方。?示例代碼如下所示:
代碼1:
#made by Jeffery
#date 2020.10.15
numbers=[] #聲明一個列表
for number in range(1,11): #用for循環指示number為1~10,循環10次number=number**2 #計算number為每個數字時的平方numbers.append(number) #使用append函數將計算出來的值寫入第3行代碼創建的列表
print(numbers) #將numbers列表的內容打印出來
?
?代碼2:
#made by Jeffery
#date 2020.10.15
numbers=[] #聲明一個列表
for number in range(1,11): #用for循環指示number為1~10,循環10次numbers.append(number**2) #使用append函數將計算出來的值寫入第3行代碼創建的列表
print(numbers) #將numbers列表的內容打印出來
這是我根據《Python編程·從入門到實踐》寫的兩段代碼,相互對照后發現二者實現的功能是一樣的,但是代碼行數、使用的變量有所不同。代碼2明顯精簡于代碼1。所以,有如下啟示:使用臨時變量有時會增強代碼易讀性,而在其他情況下,只會增長代碼長度。so,先寫出代碼清晰、功能完善的代碼,再精簡代碼!
3、使用一系列函數處理數字列表(統計)?
有了數字列表之后,我們需要從數字列表中獲得更多信息,如數字列表中的最大數、最小數以及所有數字的和。?處理數字列表的函數極其容易識記,這里我們用一段代碼解釋說明一下,就不多做贅述。
#made by Jeffery
#date 2020.10.15
numbers=[] #聲明一個列表
for number in range(1,11): #用for循環指示number為1~10,循環10次numbers.append(number**2) #使用append函數將計算出來的值寫入第3行代碼創建的列表
print("數字列表的內容為:"+str(numbers)) #將numbers列表的內容打印出來
print("數字列表中的最小的數字為:")
print(min(numbers)) #使用min()函數確定數字列表中的最小數
print("數字列表中的最大的數字為:")
print(max(numbers)) #使用max()函數確定數字列表中的最大數
print("數字列表中的數字之和為:")
print(sum(numbers)) #使用sum()函數計算數字列表中的所有數的和
?
4、列表解析(生成列表的簡潔方法)
? ? ? ?標題“2、使用rang()函數創建數字列表”中介紹的生成數字列表的方法包含3-4行代碼,有些許繁瑣,而列表分析只需編寫一行代碼就可以實現列表的生成,這里介紹是為了讓大家在閱讀他人代碼時能讀懂。
? ? ? ?列表解析將for循環和創建新元素的代碼合并成一行,并自動附加新元素。 代碼示例如下圖所示:
#made by Jeffery
#date 2020.10.15
numbers=[number**2 for number in range(1,11)] #這行代碼的易讀性降低了很多,慢慢熟悉就好了
print(numbers) #將數字列表的內容打印出來
代碼解讀:要使用這樣的語法,首先創建一個列表,在列表的方括號內定義一個表達式,用于生成將要存儲到列表中的值,如“number**2”,,接下來一個for循環,用于給剛才定義的表達式提供值。上述提到的循環不同于普通循環的地方是:for語句結尾沒有冒號“:”。?
?