七、Python第七課——有關列表的二三事(切片、切片的遍歷和復制)

目錄

一、切片?

二、遍歷切片

三、列表的復制

一、切片?

? ? ? ?此前,我們學習了如何訪問單個列表以及如何處理列表中的所有元素,那么我們如何處理列表中的部分元素呢?這就引出一個概念“切片”?。我們可以把列表看成是面包,“切片”就是要找出你最鐘意的那部分進行處理(吃掉)。如此一來,這最鐘意的部分一定有起點和終點。而且需要注意的是選擇“切片”的全程是你告訴計算機這個傻瓜的,所以你需要指明“起點”和“終點”的下標。我讀的這本書中,將下標寫作為“索引”。說下標是為了和C語言做對比。

“切片”的語法規則:

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先構建一個運動員列表
print(players[1:5])   #print函數中的“players[1:5]”即是切片,表示輸出列表中第2個元素到第5個元素

? ? ? ?這里舉例,如果你想把列表中第2個元素到第5個元素組成的部分切出來,那么你的下標就應該是1——5,我們用一段代碼舉例說明:

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #構建一個運動員列表
print(players[1:5])   #輸出列表中第2個元素到第5個元素

? ? ? ?通過上面這個例子,我們應該再次清醒的認識到,機器語言中是從“0”開始的?!而我們計數第幾個是從“1”開始的,所以第2個元素(人)對應的下標應該就是“1”(機器),第5個元素(人)對應的下表應該就是“4”(機器),但為啥在代碼中是“5”呢?這是因為切片的終點和range()函數的末尾參數一樣:都是到我們指定的終點下標的前一位停止的。我們指明切片的起點和終點后,就可以取出列表中的任一片段進行分析了。

? ? ? ?假如我們沒有指明切片起點、終點中的任意一點,將會發生什么?(沒有指明指的是沒有數字,而不是“0”切記)?

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先構建一個運動員列表
print("未指明起點的切片結果:")
print(players[:5])   #未指明起點
print("未指明終點的切片結果:")
print(players[1:])   #未指明終點

?

從實驗結果得出:切片->未指明起點,從列表起點“起”;未指明終點,至列表終點“終”。

?有人問,那要是切片的兩個點(終點、起點)都沒指明,那將會出現什么結果?起點沒有,終點沒有,那就是整個列表了,這種情況我也在下面的文章也有提到。除了上述介紹的三種切片的方法(1、有起點、終點;2、無起點、有終點;3、有起點、無終點),還有另外一種方法,就是之前學的“負數索引”,例如:

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先構建一個運動員列表
print(players[-3:])   #切出列表后三個元素

上述代碼中使用“-3”下標成功切出列表后三個元素的切片!這一方法使得無論列表多長,我們都可以直接切出從“特定位置”開始,到列表末尾的切片。舉一反三,如果我們的終點下標用負數,例如“-3”,就是切除列表頭前3個元素的切片。切片說到這里還有一個注意的地方就是:要用“:”(冒號)分割起點和終點下標。

二、遍歷切片

“遍歷”就是都走一遍,都經歷一遍,。那么,我們既然前面學了切片,那就直接用循環對切片進行遍歷即可,這里有兩種方法:

1、 先切片,后遍歷。

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先構建一個運動員列表
players_2=players[0:3]            #切出一個列表
for player in players_2:            #對剛切出的列表進行循環、遍歷print(player)                   #遍歷的同時輸出

?

2、切片與遍歷“同時進行”

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先構建一個運動員列表
for player in players[0:3]:            #直接指明切片的起點和終點,并進行輸出。print(player)                   

?這兩種方法我覺得在結果上沒什么區別,前者多使用了變量,后者是書中給出的標準用法。切片有以下幾種使用情形:可以使用切片對數據進行批量處理;編寫Web應用程序時可以使用切片來分頁顯示信息。

三、列表的復制

? ? ? 列表的復制就是創建一個包含整個列表的切片,即不規定切片的起點和終點,有的同學就提問了,我不能直接把a列表賦值給b列表嗎?我們接下來會用實際代碼舉例說明。

1、列表的復制

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先構建一個運動員列表
players_1=players[:]
print("原列表為:",players)
print("復制形成的列表為:",players_1)

?

從控制臺的顯示結果可以看出,我們確實通過切片復制、創建了一個新的列表,但這會不會就是同一個列表?(內存存儲地址一致,只是分開顯示了兩次)?我們通過接下來的代碼對其進行測試,看這兩個列表在內存中是不是分開存儲的?我們分別向這倆列表追加兩個不同的元素,看其結果。

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先構建一個運動員列表
players_1=players[:]
players_1.append("jack")       #分別向這兩個列表追加不同的元素(人名)再看結果
players.append("black")
print("原列表為:",players)
print("復制形成的列表為:",players_1)

實驗證明,我們確實通過切片形成了一個新的列表:列表中的最后一個元素正如我們分別追加的兩個元素,沒有同時出現。

那么,我們現在來驗證那位同學的猜想,是否可以通過直接賦值的方式來達到復制例表的目的?

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先構建一個運動員列表
players_1=players
print("原列表為:",players)
print("復制形成的列表為:",players_1)

目前看一切正常,那么我們使用同樣的方法:向這兩個列表追加兩個不同的元素。

#made by Jeffery
#10.19
players=['charles','martina','michael','florence','eli','jeffery']  #先構建一個運動員列表
players_1=players
players.append("jack")         #向這兩個列表分別追加不同的元素
players_1.append("black")
print("原列表為:",players)
print("復制形成的列表為:",players_1)

?

結果顯而易見,兩個列表中同時出現了追加的兩個元素,這就表明不能通過簡單的“賦值”達到復制列表的效果!?

這么做行不通的解釋是:單純“賦值”,其實還是將兩個列表的內容關聯到一起,因此這兩個列表其實指向的還是同一個列表,所以才出現了兩個列表在追加兩個不同元素后,兩個不同元素同時出現在兩個列表里的結果。所以,在使用列表的副本時,還是老老實實的去“切片”。(這里的操作結果,不同于C語言,注意區別。)?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531079.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531079.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531079.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

八、Python第八課——元組與列表、代碼格式

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 一、元組的定義 二、元組的遍歷 三、代碼格式 一、元組的定義 1、元組:不可變的列表稱為元組。這個是相對于普通列表而言的,普通列表…

九、Python第九課——Python中的if語句與運用

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 一、if語句 1、檢查變量存儲的值是否相等 2、判定字母或字符串時區別大小寫 3、檢查多個條件 4、檢查特定值是否在列表中 二、if-else語句和if-elif-el…

十、Python第十課——字典的些許知識(重點)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 (請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 初識字典 1、創建字典 2、字典的“增刪改查” …

百度地圖API如何申請?(自認為比較詳細,如解決了你的問題請收藏、點贊、關注)

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 注意:自己申請的AK要保存好,最好不要外借,避免不必要的麻煩!(寫在前面) 目…

PythonPyqt5項目開發完成后如何使用pyinstaller打包——以Pycharm編輯器為例(目前為止最正確的版本,成功打包日期為2020.11.26)

(請先看置頂博文)本博打開方式,請詳讀_liO_Oil的博客-CSDN博客_怎么把androidstudio卸載干凈 最近用Python開發了一個可視化界面,開發過程如魚得水,幾乎沒有BUG出現(項目簡單)。但是在臨近交付時…

十一、Python第十一課——用戶輸入和另一種循環(While)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 學了這么久的Python,大家肯定會好奇,不是說機器學習嗎?不是人機交互嗎?不是人工智能嗎?怎么我學了Python都十…

如何讓新創建的Python文件自動生成作者信息等內容(以Pycharm為例)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 打開Pycharm軟件后,點擊“File”,然后點擊“Settings”,就會出現下面截圖界面:然后按照箭頭所指,在對應位置…

如何將谷歌瀏覽器的背景色(包括顯示的網站界面等)全部調為黑色?2020.12.28

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 因為電腦顯示器正對窗戶的原因,平時為了透氣通風不能使用遮光簾,所以我將整個電腦的所有軟件的主題色設為黑色,這樣能降低一些光的…

Windows 10如何消除文件夾右上角的“相對箭頭”?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 整理筆記本電腦時發現&#xff0…

目標檢測第1步:如何在Windows 10下安裝MiniConda?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 目錄 一、Conda是什么&#xff…

十二、Python第十二課——函數

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 (請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 目錄 (請先看置頂博文&#xff…

目標檢測第2步:如何在Windows 10下安裝Anaconda?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 想要學習目標檢測的朋友可能會發…

目標檢測第3步:如何在Windows 10系統下安裝CUDA(更新時間2022.03.22)

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 目錄 一、自檢 1、查看PC是否…

目標檢測第5步:如何在Windows 10系統下,搭建YOLOv5(5.0)環境?保姆級,沒有人比這個更詳細了(更新時間2022.3.22)

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 目錄 一、安裝Anaconda或Minic…

導入自己寫的類,卻被標紅,原因及解決方法是?(Pycharm編輯器為例)

(請先看這篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 如果看完這篇博文,你的問題還是沒有解決,那么加我的公眾號,后臺發消息給我吧!當天回復&#xff01…

如何將Word與Endnote再次相互關聯?

(請先看置頂博文)本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客 Endnote是每一個科研人員都接觸…

十三、Python第十三課——類(包含對類的相關概念的理解,這一文的附錄讓你徹底明白類和對象)

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 目錄 (請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 一、類和對象 1、類 2、對象 二、類的創建和實例…

十四、Python第十四課——文件和異常

(請先看這篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 如果看完這篇博文,你的問題還是沒有解決,那么請關注我的公眾號,后臺發消息給我吧,當天回復&#x…

目標檢測第6步:YOLOv5(5.0)如何在Colab中訓練自定義數據集?(更新時間:2022.3.22)

(請先看這篇文章:本博打開方式!!!請詳讀!!!請詳讀!!!請詳讀!!!_Cat-CSDN博客) 如果看完這…

十五、Python第十五課——測試代碼

(請先看這篇文章:https://blog.csdn.net/GenuineMonster/article/details/104495419) 也許你聽過軟件測試?編寫函數或類時,可以為其編寫對應的測試代碼。通過測試,可檢驗代碼是否能夠按照編寫意圖工作。在…