操作列表 原

# 4.1 遍歷整個列表
magicians = ['alice', 'david', 'carolina']
for magician in magicians:    # 定義一個列表magicians,定義一個for循環, 從列表magicians中取出一個名字並將其存儲在變量magician中.最後打印出來
 print(magician)


# 4.1.1 深入地研究循環
magicians = ['alice', 'david', 'carolina']
for magician in magicians:    # 對列表中的每個元素,都將執行循環指定的步驟,而不管列表包含多少個元素。如果列表包含一百萬個元素,Python就重複執行指定的步驟一百萬次
 print(magician)

 # 4.1.2 在for循環中執行更多的操作
magicians = ['alice', 'david', 'carolina']
for magician in magicians:      #在for 循環中,想包含多少行代碼都可以。在代碼行for magician in magicians 後面,每個縮進的代碼行都是循環的一部分,且將針對列表中的每個值都執行一次。因
 print(magician.title() + ", that was a great trick!")      #此,可對列表中的每個值執行任意次數的操作


# 4.1.3 在for循環結束後執行一些操作
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title()+", that was a great trick!")
print('thank you')  #在for 循環後面,沒有縮進的代碼都只執行一次,而不會重複執行

# 4.2 避免縮進錯誤
# Python根據縮進來判斷代碼行與前一個代碼行的關係。在前面的示例中,向各位魔術師顯示消息的代碼行是for 循環的一部分,因爲它們縮進了。Python通過使用縮進讓代碼更易
# 讀;簡單地說,它要求你使用縮進讓代碼整潔而結構清晰。在較長的Python程序中,你將看到縮進程度各不相同的代碼塊,這讓你對程序的組織結構有大致的認識。
# 當你開始編寫必須正確縮進的代碼時,需要注意一些常見的縮進錯誤 。例如,有時候,程序員會將不需要縮進的代碼塊縮進,而對於必須縮進的代碼塊卻忘了縮進。通過查看這
# 樣的錯誤示例,有助於你以後避開它們,以及在它們出現在程序中時進行修復。

# 4.2.1 忘記縮進
# 對於位於for 語句後面且屬於循環組成部分的代碼行,一定要縮進。如果你忘記縮進,Python會提醒你:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
❶ print(magician)
# print 語句(見❶)應縮進卻沒有縮進。Python沒有找到期望縮進的代碼塊時,會讓你知道哪行代碼有問題。

# 4.2.2 忘記縮進額外的代碼行
#有時候,循環能夠運行而不會報告錯誤,但結果可能會出乎意料。試圖在循環中執行多項任務,卻忘記縮進其中的一些代碼行時,就會出現這種情況。
#例如,如果忘記縮進循環中的第2行代碼(它告訴每位魔術師,我們期待他的下一次表演),就會出現這種情況:
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() + ".\n")
#Alice, that was a great trick!
#David, that was a great trick!
#Carolina, that was a great trick!
#I can't wait to see your next trick, Carolina.
#這是一個邏輯錯誤 。從語法上看,這些Python代碼是合法的,但由於存在邏輯錯誤,結果並不符合預期。如果你預期某項操作將針對每個列表元素都執行一次,但它卻只執行了
#一次,請確定是否需要將一行或多行代碼縮進。

# 4.2.3 不必要的縮進
# 如果你不小心縮進了無需縮進的代碼行,Python將指出這一點:
message='Hello Python world'
 print(message)
 # 結果 :    print(message)
# IndentationError: unexpected indent   print 語句無需縮進,因爲它並不屬於前一行代碼,因此Python將指出這種錯誤:
#爲避免意外縮進錯誤,請只縮進需要縮進的代碼。在前面編寫的程序中,只有要在for 循環中對每個元素執行的代碼需要縮進。

# 4.2.4 循環不必要的縮進
#如果你不小心縮進了應在循環結束後執行的代碼,這些代碼將針對每個列表元素重複執行。在有些情況下,這可能導致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() + ".\n")
❶ print("Thank you everyone, that was a great magic show!")
由於❶處的代碼行被縮進,它將針對列表中的每位魔術師執行一次

# 4.2.5 遺漏了冒號
magicians = ['alice', 'david', 'carolina']
for magician in magicians:    #for 語句末尾的冒號告訴Python,下一行是循環的第一行。
print(magician)

# 4.3 創建數值列表
#需要存儲一組數字的原因有很多,例如,在遊戲中,需要跟蹤每個角色的位置,還可能需要跟蹤玩家的幾個最高得分。在數據可視化中,處理的幾乎都是由數字(如溫度、距
#離、人口數量、經度和緯度等)組成的集合。
#列表非常適合用於存儲數字集合,而Python提供了很多工具,可幫助你高效地處理數字列表。明白如何有效地使用這些工具後,即便列表包含數百萬個元素,你編寫的代碼也能運
#行得很好。

# 4.3.1 使用函數range()
# Python函數range() 讓你能夠輕鬆地生成一系列的數字。例如,可以像下面這樣使用函數range() 來打印一系列的數字:
for value in range(1,5):
     print(value )   # 上述代碼好像應該是打印1-5,實際上不會打印5
# 結果: 1 2 3 4
# 在這個示例中,range() 只是打印數字1~4,這是你在編程語言中經常看到的差一行爲的結果。函數range() 讓Python從你指定的第一個值開始數,並在到達你指定的第二個值
# 後停止,因此輸出不包含第二個值(這裏爲5)。
# 使用range() 時,如果輸出不符合預期,請嘗試將指定的值加1或減1。

# 4.3.2 使用range()創建數字列表
# 要創建數字列表,可使用函數list() 將range() 的結果直接轉換爲列表。如果將range() 作爲list() 的參數,輸出將爲一個數字列表。
number= list(range(1,5))   # 要將這些數字轉換爲一個列表,可使用list() :
print(number)
# 結果: [1, 2, 3, 4]
number= list(range(2,11,2)) # 函數range() 從2開始數,然後不斷地加2,直到達到或超過終值(11)
print(number)
# 結果:[2, 4, 6, 8,10]
squares =[]
for value in range(1,11):      # 我們創建了一個空列表
    square=value**2            #使用函數range() 讓Python遍歷1~10的值,計算當前值的平方,並將結果存儲到變量square
    squares.append(square)     #將新計算得到的平方值附加到列表squares 末尾
print(squares)                 #循環結束後,打印列表squares

# 4.3.3 對數字列表執行簡單的統計計算
# 有幾個專門用於處理數字列表的Python函數。例如,你可以輕鬆地找出數字列表的最大值、最小值和總和:
number =[1,2,3,4,5,6,7,8,9,0]
print(min(number))   #min 最小
print(max(number))   #max 最大
print(sum(number))   #sum 和

# 4.3.4 列表解析
number =[value**2 for value in range(1,11)]
print(number)
#要使用這種語法,首先指定一個描述性的列表名,如number ;然後,指定一個左方括號,並定義一個表達式,用於生成你要存儲到列表中的值。在這個示例中,表達式
#爲value**2 ,它計算平方值。接下來,編寫一個for 循環,用於給表達式提供值,再加上右方括號。在這個示例中,for 循環爲for value in range(1,11) ,它將值
#1~10提供給表達式value**2 。請注意,這裏的for 語句末尾沒有冒號。

# 4.4.1  切片
#要創建切片,可指定要使用的第一個元素和最後一個元素的索引。與函數range() 一樣,Python在到達你指定的第二個索引前面的元素後停止。要輸出列表中的前三個元素,需
#要指定索引0~3,這將輸出分別爲0 、1 和2 的元素。
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])          # 起始索引指定爲0 ,並將終止索引指定爲3
# 結果: ['charles', 'martina', 'michael']
print(players[:3])   #沒有指定起始,從頭開始提取
print(players[0:])   #沒有指定結束,提取到末尾
print(players[-3:])  #無論列表多長,這種語法都能夠讓你輸出從特定位置到列表末尾的所有元素。本書前面說過,負數索引返回離列表末尾相應距離的元素,因此你可以輸出列表末尾的任何切片。

# 4.4.2 遍歷切片
players = ['charles', 'martina', 'michael', 'florence', 'eli']
for player in players[0:3]:   # 可在for循壞中使用切片
    print(player)

# 4.4.3 複製列表
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]   #首先創建了一個名爲my_foods 的食品列表(見❶),然後創建了一個名爲friend_foods 的新列表(見❷)。我們在不指定任何索引的情況下從列表my_foods 中提取
print("My favorite foods are:")  #一個切片,從而創建了這個列表的副本,再將該副本存儲到變量friend_foods 中。
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
###############################################
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
my_foods.append('iceb')
friend_foods.append('shaoo')      #首先將my_foods 的元素複製到新列表friend_foods 中。接下來,在每個列表中都添加一種食品:在列表my_foods 中添加'cannoli'而在friend_foods 中添加'ice cream'
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)

#  4.5 元組
# 列表非常適合用於存儲在程序運行期間可能變化的數據集。列表是可以修改的,這對處理網站的用戶列表或遊戲中的角色列表至關重要。然而,有時候你需要創建一系列不可修
# 改的元素,元組可以滿足這種需求。Python將不能修改的值稱爲不可變的 ,而不可變的列表被稱爲元組 。

# 4.5.1 定義元組
# 元組看起來猶如列表,但使用圓括號而不是方括號來標識。定義元組後,就可以使用索引來訪問其元素,就像訪問列表元素一樣。
dimensions =(200,50)  # 定義了元組dimensions
print(dimensions[1])
# 結果: 50
# 試圖修改元組的操作是禁止的

# 4.5.2 遍歷元組的值
# 像列表一樣,也可以使用for 循環來遍歷元組中的所有值:
dimensions =(200,50)
for dimension in dimensions:
 print(dimension)

# 4.5.2 修改元組變量
# 雖然不能修改元組的元素,但可以給存儲元組的變量賦值。因此,如果要修改前述矩形的尺寸,可重新定義整個元組:
dimensions =(200,50)
for dimension in dimensions:
 print(dimension)
dimensions =(100,500)  #將一個新元組存儲到變量dimensions 中
for dimension in dimensions:
    print(dimension)

# 4.6 設置代碼格式
#隨着你編寫的程序越來越長,有必要了解一些代碼格式設置約定。請花時間讓你的代碼儘可能易於閱讀;讓代碼易於閱讀有助於你掌握程序是做什麼的,也可以幫助他人理解你
#編寫的代碼。
#爲確保所有人編寫的代碼的結構都大致一致,Python程序員都遵循一些格式設置約定。學會編寫整潔的Python後,就能明白他人編寫的Python代碼的整體結構——只要他們和你遵
#循相同的指南。要成爲專業程序員,應從現在開始就遵循這些指南,以養成良好的習慣。

# 4.6.1 格式設置指南
#若要提出Python語言修改建議,需要編寫Python改進提案 (Python Enhancement Proposal,PEP)。PEP 8是最古老的PEP之一,它向Python程序員提供了代碼格式設置指南。PEP 8的
#篇幅很長,但大都與複雜的編碼結構相關。
#Python格式設置指南的編寫者深知,代碼被閱讀的次數比編寫的次數多。代碼編寫出來後,調試時你需要閱讀它;給程序添加新功能時,需要花很長的時間閱讀代碼;與其他程序
#員分享代碼時,這些程序員也將閱讀它們。
#如果一定要在讓代碼易於編寫和易於閱讀之間做出選擇,Python程序員幾乎總是會選擇後者。下面的指南可幫助你從一開始就編寫出清晰的代碼。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章