日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python】掌握Python中的索引和切片

發布時間:2025/3/12 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】掌握Python中的索引和切片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 | Giorgos Myrianthous

編譯 | VK
來源 | Towards Data Science

在Python中,像字符串或列表這樣的有序序列的元素可以通過它們的索引單獨訪問。這可以通過提供我們希望從序列中提取的元素的數字索引來實現。另外,Python支持切片,這是一個特性,可以讓我們提取原始sequence對象的子集。

在本文中,我們將探討索引和切片是如何工作的,以及如何使用它們來編寫更干凈、更具python風格的代碼。

索引

與大多數編程語言一樣,Python偏移量從位置0開始,在位置N-1結束,其中N被定義為序列的總長度。例如,字符串Hello的總長度等于5,每個字符都可以通過索引0到4進行訪問,如下圖所示:

現在,你可以通過編程方式訪問字符串中的各個字符,方法是提供要獲取的相應偏移量(用方括號括起來):

>>>?my_string?=?'Hello' >>>?print(my_string[0]) 'H' >>>?print(my_string[2]) 'l' >>>?print(my_string[3]) 'l'

同樣重要的是要知道,當你嘗試訪問大于序列長度(減1)的偏移量時,Python將拋出一個IndexError,通知你請求的偏移量超出范圍:

>>>?my_string[5] Traceback?(most?recent?call?last):File?"<input>",?line?1,?in?<module> IndexError:?string?index?out?of?range

還可以通過提供一個負索引來訪問元素,該索引基本上對應于從序列右側開始的索引。最后一項可以通過-1訪問,倒數第二項可以通過-2訪問,依此類推

從技術上講,當使用負偏移量時,Python會將該偏移量添加到序列的長度中,以便推斷準確的位置。例如,假設我們要使用負偏移量從字符串my_string = 'Hello’中提取字符e。現在表達式my_string[-4]基本上將被翻譯成my_string[len(my_string) - 4],它相當于my_string[5 - 4]和my_string[1],最終為我們提供所需的輸出:

>>>?my_string[-4] 'e'

切片

切片是一種索引形式,它允許我們推斷原始序列的整個(子)部分,而不僅僅是單個項。

要在Python中對序列執行切片,需要提供兩個由冒號分隔的偏移量,盡管在某些情況下可以只定義其中一個,甚至不定義(下面將討論更多關于這些情況的內容)。

第一個偏移量表示起點并包含在內,而第二個偏移量表示終點,但與起點偏移量不同,它不包含在內。

my_string[start:end]

因此,在執行切片時,Python將返回一個新對象,其中包含從下索引開始到上索引少一個位置的所有元素。作為一個例子,考慮一個用例,其中我們需要獲取字符串的前兩個元素:

>>>?my_string[0:2] 'He'

正如我已經提到的,2個位置都提供并不是強制性的。如果忽略起始偏移量,則其值將默認為0。另一方面,如果不提供結束偏移量,則其默認值將等于序列的長度。實際上有三種不同的情況,如下所示:

my_string[0:]???#?忽略終點 my_string[:-1]??#?忽略起點 my_string[:]????#?都忽略

忽略終點偏移

當我們想切掉前導文本時,第一個符號通常很有用。假設我們想要得到字符串的第一個字符以外的所有字符。我們可以使用以下符號

>>>?my_string?=?'Hello' >>>?my_string[1:] 'ello'

正如我們已經提到的,當結束偏移量被忽略時,默認是序列的長度:

>>>?my_string[1:]?==?my_string[1:len(my_string)] True

忽略起始偏移

假設我們現在只需要字符串的第一個字符。在這種情況下,忽略起始偏移量將起到以下作用:

>>>?my_string?=?'Hello' >>>?my_string[:-1] 'Hell'

如果跳過下限,則其值將默認為0:

>>>?my_string[:-1]?==?my_string[0:-1] True

忽略兩個偏移

Python中的切片表示法允許我們省略起始偏移和結束偏移。

>>>?my_string?=?'Hello' >>>?my_string[:]?==?my_string[0:len(my_string)] True

如果忽略下限和上限,則默認值分別為0和len(序列),你可能想知道這是否有幫助或用處。好吧,這是一種快速復制對象的方法,如下所示

>>>?my_string?=?'Hello' >>>?my_string_copy?=?my_string[:]

請注意,當此切片技術將生成一個不同的對象時,該對象將被分配到不同的內存位置。這對字符串之類的不可變對象類型沒有任何區別,但是在處理列表之類的可變對象類型時,注意這一點非常重要。

擴展切片

Python中的切片表達式附帶了第三個索引,該索引是可選的,指定時用作步驟。顯然,當省略step值時,它默認為1,這意味著請求的sequence子部分中的任何元素都不會被跳過。符號如下所示

[start:end:step]

例如,假設我們有一個字符串,其中包含字母表中的字母,我們希望從位于位置1和19的字母中提取其中的所有其他項,:

>>>?import?string >>>?my_string?=?string.ascii_lowercase?#?'abcdefg...' >>>?my_string[1:20:1] 'bdfhjlnprt'

這種符號可以用來代替列表生成式。例如,假設我們想要得到一個列表中所有具有偶數索引的元素。實現這一點的列表生成式是

>>>?my_list?=?[100,?400,?34,?179,?0,?89,?121] >>>?[value?for?index,?value?in?enumerate(my_list)?if?index?%?2?==?0] [100,?34,?0,?121]

在這種情況下,切片表示法可以使我們的代碼更簡單,可讀性更高:

>>>?my_list?=?[100,?400,?34,?179,?0,?89,?121] >>>?my_list[::2] [100,?34,?0,?121]

與開始偏移和結束偏移一樣,步長索引可以是負數。從技術上講,當我們想要反轉有序序列中元素的順序時,這是很有用的

>>>?my_string?=?'Hello' >>>?my_string[::-1] 'olleH'

換句話說,當應用負步幅索引時,起始偏移和結束偏移的效果是相反的。為了弄清楚這一點,讓我們跳到另一個例子中,我們實際上定義了所有三個可能的偏移量。

>>>?import?string >>>?my_string?=?string.ascii_lowercase?#?'abcdefg...' >>>?my_string[20:10:-1] 'utsrqponml'

在上面的例子中,我們基本上按照相反的順序從索引11到20創建一個新字符串。

結論

在本文中,我們探討了在Python中索引和切片是如何工作的。這兩種符號在大多數Python應用程序中都被廣泛使用,因此你需要確保了解它們是如何工作的。

索引

  • 第一項從偏移量0開始

  • 最后一項結束于偏移長度len(my_sequence) - 1

  • 負指數表示計數將向后開始。從本質上講,它被添加到序列的長度中。例如,my_string[-1]轉換為my_string[len(my_string) - 1]

切片

  • 起始索引(下限)包含在內

  • 結束索引(上限)不包含在內

  • 當忽略起始索引時,它默認為0

  • 如果省略結束索引,則默認為序列的長度

  • 如果省略起始索引和結束索引,則會創建原始對象的副本-my_string[:]

  • 第三個索引表示步幅

  • 省略步幅索引時,默認為1(即不跳過任何元素)

  • 負步幅索引可以幫助我們創建反向序列(例如,my_string[::-1])

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:

總結

以上是生活随笔為你收集整理的【Python】掌握Python中的索引和切片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。