第四章:操作列表
阿新 • • 發佈:2017-12-07
clas str 3.3 轉換 一個 改變 導致 賦值 any 第四章:操作列表
4.1 遍歷整個列表
如果名單很長,將包含大量反復的代碼。另外,每當名單的長度發生變化時,都必須修改代碼。通過for
循環,可讓Python去處理這些問題
1)使用for循環來打印魔術師名單中的所有名字: magicians.py
例:magicians=[‘alice‘,‘david‘,‘carolina‘]
for magician(變量名) in magicians:
print(magician) 變量名
2)這行代碼讓Python從列表magicians中取出一個名字,並將其存儲在變量magician中。最後,我們讓
Python打印前面存儲到變量magicica中的名字。這樣,對於列表中的每個名字,Python都將重復執行
代碼行。
也可以這樣解讀代碼:對於列表magicians中的每位魔術師,都將其名字打印出來
4.1.1 深入地研究循環
循環這種概念很重要,因為它是計算機自動完成重復工作的常見方式之一。
1)Python將首先讀取其中第一行代碼:for magician in magicians
這行代碼讓Python獲取列表magicians中的第一個值(‘alice‘),並將其存儲到變量magician
中。
2)接下來,Python讀取下一行代碼:print(magician)
它讓Python打印magician的值依然是‘alice‘
3)接下來,Python再次執行循環,對列表中最後一個值----‘carolina‘進行處理。在這個示例中,for循環後面沒有其他代碼,因此程序就此結束。
補充:另外,編寫for循環時,對於用於存儲列表中每個值的臨時變量,可指定任何名稱。然而,選擇描述單個列表元素的有意義的名稱大有幫助。例如,對於小貓列表、小狗列表和一般性列表。
例:for cat in cats:
for dog in dogs:
for item in list_of_items:
4.1.2 在for循環中執行更多操作
1)在for循環中,可對每個元素執行任何操作。對於每位魔術師,都打印一條消息,指出他的表演精彩
例:magicians=[‘alice‘,‘david‘,‘carolina‘]
for magician in magicians:
print(magician.title()+‘,that was a great trick!‘)
4.1.3 在for循環結束後執行一些操作
1)在for循環後面,沒有縮進的代碼都只執行一次,而不會重復執行。
2)下面打印一條向全體魔術師致謝的消息,感謝他們的精彩表演。
3)想要打印一條給全體魔術師的致謝消息,需要將相應的代碼放在for循環後面,且不縮進
例:magicians=[‘alice‘,‘david‘,‘carolina‘]
for magician in magicians:
print(magician.title()+‘,that was a great trick!‘)
print("I can‘t wait to see your next trick, "+magician.title()+‘.‘)
print(‘Thank you,everyone.That was a great magic show!‘)
4.2 縮進
4.2.1 忘記縮進
1)對於位於for語句後面且屬於循環組成部分的代碼行,一定要縮進。如果忘記縮進,Python會提醒你
例:magicians=[‘alice‘,‘david‘,‘carolina‘]
for magician in magicians:
print(magician) #會有縮進報錯:IndentationError: expected an indented block
4.2.2 忘記縮進額外代碼行
1)有時候,循環能夠運行而不會報告錯誤,但結果可能會出乎意料。
例:magicians=[‘alice‘,‘david‘,‘carolina‘]
for magician in magicians:
print(magician.title()+‘,that was a great trick!‘)
print("I can‘t wait to see your next trick, "+magician.title()+‘.‘)#忘記縮進的額外代碼行執行語句後效果與需求不符
4.2.3 不必要的縮進
1)如果你不小心縮進了無需縮進的代碼行,Python將指出這一點
例:message="Hello Python world!"
print(message) #不必要的所及報錯 :IndentationError: unexpected indent
4.2.4 循環後不必要的縮進
1)如果你不小心縮進了應在循環結束後執行的代碼,這些代碼將針對每個列表元素重復執行。
這可能導致Python報告語法錯誤,但在大多數情況下,這只會導致邏輯錯誤。
例:magicians=[‘alice‘,‘david‘,‘carolina‘]
for magician in magicians:
print(magician.title()+‘,that was a great trick!‘)
print("I can‘t wait to see your next trick, "+magician.title()+‘.‘)
print(‘Thank you,everyone.That was a great magic show!‘) #循環後不必要的縮進
4.2.5 遺漏了冒號
1)for語句末尾的冒號告訴Python,下一行是循環的第一行
例:magicians=[‘alice‘,‘david‘,‘carolina‘]
for magician in magicians #遺漏冒號報錯:SyntaxError: invalid syntax
prin(magician)
4.3 創建數值列表
4.3.1 使用函數range()
1)Python函數range()讓你能夠輕松地生成一系列的數子 numbers.py
例:for value in range(1,5)
print(value) ===>打印數子1,2,3,4
2)函數range()讓Python從你指定的第一個值開始,並在到達你指定的第二個值後停止,因此輸入不包含第二個值(這裏為5)
4.3.2 使用range()創建數子列表
1)要創建數子列表,可使用函數list()將range()的結果直接轉換為列表。如果將range()作為list()參數,輸出將為一個數子列表
4.3.3 對數子列表執行簡單的統計計算
1)min(變量名)方法:找出列表中的最小值
例:digits=[1,2,3,4,5,6,7,8,9,0]
min(digits) ===> 0
2)max(變量名)方法:找出列表中的最大值
例:digits=[1,2,3,4,5,6,7,8,9,0]
max(digits) ===>9
3)sum(變量名)方法:找出列表總和
例:digits=[1,2,3,4,5,6,7,8,9,0]
sum(digits) ===>45
4.3.4 列表解析
1)列表解析將for循環和創建新元素的代碼合並成一行,並自動附加新元素
例:squares=[value**2 for value in range(1,11)]
print(squares)
2)要使用這種語法
<1>首先指定一個描述性的列表名,如squares。
<2>然後,指定一個左方括號,並定義一個表達式,用於生成你要存儲到列表中的值。在這個示例中表達式為 "value**2" 它計算平方值
<3>接下來,編寫一個for循環,用於給表達式提供值,再加上右方括號。在這個示例中,for循環為 “for value in range(1,11)”
它將值1~10提供給表達式 “value**2”
<4>註意:這裏的for循環語句末尾沒有冒號
4.4.1 切片
1)要創建切片,可指定要使用的第一個元素和最後一個元素的索引。與函數range()一樣,Python在到達你指定的第二個索引前面的元素後停止。要輸出列表中的前三個元素,需要指定索引0~3,這將輸出分別為0、1和2元素。
例:players=[‘charles‘,‘martina‘,‘michael‘,‘florence‘,‘eli‘]
print(players[0:3])
2)可以生產列表的任何子集,例如:如果你要提取列表的第2~4個元素,可將起始索引指定為1,並將終止索引指定為4
例:players=[‘charles‘,‘martina‘,‘michael‘,‘florence‘,‘eli‘]
print(players[1:4])
3)如果你沒有指定第一個索引,Python將自動從列表開頭開始
例:players=[‘charles‘,‘martina‘,‘michael‘,‘florence‘,‘eli‘]
print(players[:4])
4)要讓切片終止列表末尾,也可使用類似的語法。例如,如果要提取第3個元素到列表末尾的所有元素,可將起始索引指定為2,並省略終止索引
例:players=[‘charles‘,‘martina‘,‘michael‘,‘florence‘,‘eli‘]
print(players[2:])
5)無論列表多長,這種語法都能夠讓你輸出從特定位置到列表末尾的所有元素。本書前面說過,負數索引返回離列表末尾相應距離的元素,因此你可以輸出列表末尾的任何切片。例如,如果你要輸出名單上的最後三名隊員,可以使用切片players[-3:]
例:players=[‘charles‘,‘martina‘,‘michael‘,‘florence‘,‘eli‘]
print(players[-3:])
6)切片的第三個參數:從x到y-1,每n個取一個制作切片(可以理解為步長)
例:num=[num for num in range(1,101)]
print(num[2::3]) #從1到100取3的倍數 從3開始到列表最後個元素100,每3個取一個制作切片
print(num[4:50:5]) #從5開始到50取5的倍數 從5開始到50 步長為5
4.4.2 遍歷切片
1)如果要遍歷列表的部分元素,可在for循環中使用切片。在下面的示例中,我們遍歷前三名隊員,並打印他們名字
例:players=[‘charles‘,‘martina‘,‘michael‘,‘florence‘,‘eli‘]
print("Here are th first three players on my team:")
for player in players[:3]:
print(player.title())
2)在很多情況下,切片都很有用。例如,編寫遊戲時,你可以在玩家退出遊戲時將其最終得分加入到一個列表中。然後,為獲取該玩家的三個最高得分,你可以將該列表按降序排列,再創建一個只包含前三個得分的切片
4.4.3 復制列表
1)要復制列表,可創建一個包含整個列表的切片,方法是同時省略其實索引和終止索引([:])。這讓Python創建一個始於第一個元素,終止最後一個元素的切片,即復制整個列表。
假如,假設有一個列表,其中包含你最喜歡的三種食品,而你還想創建另一個列表,在其中包含一位朋友喜歡的所有食品。
不過,你喜歡的食品,這位朋友都喜歡,因此你可以通過復制來創建這個列表
例:my_foods=[‘pizza‘,‘falafel‘,‘carrot cake‘]
frind_foods=my_foods[:]
print("My favorite foods are: ")
print(my_foods)
print("\nMy friends‘s favorite foods are: ")
print(friend_foods)
4.5 元組
1)列表非常適合用於存儲在程序運行期間可能變化的數據集。列表是可以修改的,這對處理網站的用戶列表或遊戲中的角色列表至關重要。然而,有時候你需要創建一系列不可修改的元素,元組可以滿足這種需求。Python將不能修改的值稱為 不可變的,而不可變的列表唄稱為元組
4.5.1 定義元組
1)元組看起來猶如列表,但使用圓括號而不是方括號來標識。定義元組後,就可以使用索引來訪問其元素,就像訪問列表元素一樣。
例:dimensions=(200,50)
dimensions[0]=250 #改變第一個元素的值
===> 此時python會報錯,並給出錯誤提示:不能給元組的元素賦值
4.5.2 遍歷元組中的所有值
1)像列表一樣,也可以使用for循環來遍歷元組中的所有值:
例:dimensions=(200,50)
for dimension in dimensions:
print(dimension)
4.5.3 修改元組變量
1)雖然不能修改元組的元素,但可以給存儲元組的變量賦值。因此,如果要修改前述舉行的尺寸,可重新定義整個元組:
例:dimensions=(200,50)
print("Original dimensions: ")
for dimension in dimensions:
print(dimension)
dimensions=(400.100) #給元組重新賦值
print("")
4.6 設置代碼格式
為確保所有人編寫的代碼的結構都大致一致,Python程序猿都遵循一些格式設置約定。學會編寫整潔的Python後,就能明白他人編寫的Python代碼的整體結構——只要他們和你遵循相同的指南。要成為專業程序猿,應從現在開始遵循這些指南,以養成良好的習慣。
4.6.1 格式設置指南
詳情請訪問https://www.python.org/dev/peps/pep-0008/, 閱讀PEP 8 格式設置指南
4.6.2 定制Geany的設置
1、將制表符轉換為空格
選擇菜單Edit(編輯)---->Preferences(首選項),再依次單擊Editor(編輯器)---->Indentation(縮進)。將制表符寬度設置為4
並將Type設置為Spaces
如果你在程序中混合使用了標示符和空格,可選擇菜單Document(文檔)---->Replace Tabs by Spaces(替換制表符為空格),將所有制表符都轉換為空格
2、設置行長標誌
要在Geany中設置這項功能,請選擇菜單Edit(編輯)---->Preferences(首選項),再依次單擊Editor(編輯器)---->Display(顯示),確保啟用了長行標誌,再確保文本框“列”中的值為79
3、縮進和撤銷縮進代碼塊
要縮進代碼塊 可按Ctrl+I
要撤銷代碼塊縮進 可按Ctrl+U
第四章:操作列表