【編測編學】零基礎學python_11_列表(切片+遍歷切片+複製)

bcbxhome 發表於 2020-11-27

1.列表切片
要建立切片,可指定要使用的第一個元素和最後一個元素的索引。與函式 range() 一樣, Python 在到達你指定的第二個索引前面的元素後停止。要輸出列表中的前三個元素,需要指定索引 0~3 ,這將輸出分別為 0 、 1 和 2 的元素。
下面的示例處理的是一個運動隊成員列表:

  1. players = ['charles', 'martina', 'michael', 'florence', 'eli']
  2. print(players[0:3])
複製程式碼

處的程式碼列印該列表的一個切片,其中只包含三名隊員。輸出也是一個列表,其中包含前三名隊員:
【編測編學】零基礎學python_11_列表(切片+遍歷切片+複製) 
你可以生成列表的任何子集,例如,如果你要提取列表的第 2~4 個元素,可將起始索引指定為 1 ,並將終止索引指定為 4 :

  1. players = ['charles', 'martina', 'michael', 'florence', 'eli']
  2. print(players[1:4])
複製程式碼

這一次,切片始於 'marita' ,終於 'florence' :
【編測編學】零基礎學python_11_列表(切片+遍歷切片+複製) 
如果你沒有指定第一個索引, Python 將自動從列表開頭開始:

  1. players = ['charles', 'martina', 'michael', 'florence', 'eli']
  2. print(players[:4])
複製程式碼

由於沒有指定起始索引, Python 從列表開頭開始提取:
【編測編學】零基礎學python_11_列表(切片+遍歷切片+複製) 
要讓切片終止於列表末尾,也可使用類似的語法。例如,如果要提取從第 3 個元素到列表末尾的所有元素,可將起始索引指定為 2 ,並省略終止索引:

  1. players = ['charles', 'martina', 'michael', 'florence', 'eli']
  2. print(players[2:])
複製程式碼

Python 將返回從第 3 個元素到列表末尾的所有元素:
【編測編學】零基礎學python_11_列表(切片+遍歷切片+複製) 
無論列表多長,這種語法都能夠讓你輸出從特定位置到列表末尾的所有元素。本書前面說過,負數索引返回離列表末尾相應距離的元素,因此你可以輸出列表末尾的任何切片。
例如,如果你要輸出名單上的最後三名隊員,可使用切片 players[-3:] :

  1. players = ['charles', 'martina', 'michael', 'florence', 'eli']
  2. print(players[-3:])
複製程式碼

上述程式碼列印最後三名隊員的名字,即便隊員名單的長度發生變化,也依然如此。


2.遍歷切片
如果要遍歷列表的部分元素,可在 for 迴圈中使用切片。在下面的示例中,我們遍歷前三名隊員,並列印他們的名字:

  1. players = ['charles', 'martina', 'michael', 'florence', 'eli']
  2. print("Here are the first three players on my team:")
  3. for player in players[:3]:
  4.        print(player.title())
複製程式碼

此處的程式碼沒有遍歷整個隊員列表,而只遍歷前三名隊員:
【編測編學】零基礎學python_11_列表(切片+遍歷切片+複製) 
在很多情況下,切片都很有用。例如,編寫遊戲時,你可以在玩家退出遊戲時將其最終得分加入到一個列表中。然後,為獲取該玩家的三個最高得分,你可以將該列表按降序排列,再建立一個只包含前三個得分的切片。處理資料時,可使用切片來進行批量處理;編寫 Web 應用程式時,可使用切片來分頁顯示資訊,並在每頁顯示數量合適的資訊。


3. 複製列表
你經常需要根據既有列表建立全新的列表。下面來介紹複製列表的工作原理,以及複製列表可提供極大幫助的一種情形。
要複製列表,可建立一個包含整個列表的切片,方法是同時省略起始索引和終止索引( [:] )。這讓 Python 建立一個始於第一個元素,終止於最後一個元素的切片,即複製整個列表。
例如,假設有一個列表,其中包含你最喜歡的四種食品,而你還想建立另一個列表,在其中包含一位朋友喜歡的所有食品。不過,你喜歡的食品,這位朋友都喜歡,因此你可以通過複製來建立這個列表:

  1. my_foods = ['pizza', 'falafel', 'carrot cake']
  2. friend_foods = my_foods[:]
  3. print("My favorite foods are:")
  4. print(my_foods)
  5. print("\nMy friend's favorite foods are:")
  6. print(friend_foods)
複製程式碼

我們首先建立了一個名為 my_foods 的食品列表,然後建立了一個名為 friend_foods 的新列表。我們在不指定任何索引的情況下從列表 my_foods 中提取
一個切片,從而建立了這個列表的副本,再將該副本儲存到變數 friend_foods 中。列印每個列表後,我們發現它們包含的食品相同:
【編測編學】零基礎學python_11_列表(切片+遍歷切片+複製) 
為核實我們確實有兩個列表,下面在每個列表中都新增一種食品,並核實每個列表都記錄了相應人員喜歡的食品:

  1. my_foods = ['pizza', 'falafel', 'carrot cake']
  2. friend_foods = my_foods[:]
  3. my_foods.append('cannoli')
  4. friend_foods.append('ice cream')
  5. print("My favorite foods are:")
  6. print(my_foods)
  7. print("\nMy friend's favorite foods are:")
  8. print(friend_foods)
複製程式碼

與前一個示例一樣,我們首先將 my_foods 的元素複製到新列表 friend_foods 中。接下來,在每個列表中都新增一種食品:在列表 my_foods 中新增 'cannoli'
,而在 friend_foods 中新增 'ice cream' 。最後,列印這兩個列表,核實這兩種食品包含在正確的列表中。
【編測編學】零基礎學python_11_列表(切片+遍歷切片+複製) 
第一個輸出表明, 'cannoli' 包含在你喜歡的食品列表中,而 'ice cream' 沒有。第二個輸出表明, 'ice cream' 包含在你朋友喜歡的食品列表中,而 'cannoli' 沒
有。倘若我們只是簡單地將 my_foods 賦給 friend_foods ,就不能得到兩個列表。例如,下例演示了在不使用切片的情況下複製列表的情況:

  1. my_foods = ['pizza', 'falafel', 'carrot cake']
  2. friend_foods = my_foods
  3. my_foods.append('cannoli')
  4. friend_foods.append('ice cream')
  5. print("My favorite foods are:")
  6. print(my_foods)
  7. print("\nMy friend's favorite foods are:")
  8. print(friend_foods)
複製程式碼

這裡將 my_foods 賦給 friend_foods ,而不是將 my_foods 的副本儲存到 friend_foods。這種語法實際上是讓 Python 將新變數 friend_foods 關聯到包含
在 my_foods 中的列表,因此這兩個變數都指向同一個列表。鑑於此,當我們將 'cannoli' 新增到 my_foods 中時,它也將出現在 friend_foods 中;同樣,雖然 'ice
cream' 好像只被加入到了 friend_foods 中,但它也將出現在這兩個列表中。
輸出表明,兩個列表是相同的,這並非我們想要的結果:
【編測編學】零基礎學python_11_列表(切片+遍歷切片+複製) 
注意  現在暫時不要考慮這個示例中的細節。基本上,當你試圖使用列表的副本時,如果結果出乎意料,請確認你像第一個示例那樣使用切片複製了列表。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69985967/viewspace-2737478/,如需轉載,請註明出處,否則將追究法律責任。

相關文章