程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

1.7 列表和字符串切片(Python)

編輯:Python

本文來自異想之旅公開發布的Python教程,原文地址:https://www.yuque.com/yxzl/python

本文以列表舉例,字符串與之類似,將在最後簡單對比。

一維:索引

我們經過 1.6 章節的學習已經知道,我們定義一個列表 a = [1, 2, 3] ,可以通過 a[0]a[1]a[2] 的方式取出其中的每一項。

這就是最簡單的索引,現在在這個的基礎上,我們再介紹一個負數索引

我們定義這樣的一個列表,並嘗試打印它的每一項:

t = ['a', 'b', 'c', 'd', 'e']
print(t[0], t[1], t[2], t[3], t[4]) # a b c d e
print(t[-1], t[-2], t[-3], t[-4], t[-5]) # e d c b a

可以看到, 0,1,2... 分別取出了列表從前往後數的第 1,2,3... 項,而 -1,-2,-3... 分別取出了列表從後往前數的第 1,2,3... 項。

為什麼第1項索引為0?因為編程語言從0開始計數。為什麼倒數第一項索引為-1而不是-0?因為-00相同,將導致沖突。

下面再用這張比較直觀的圖片幫助大家記憶索引。

二維:切片

我們先看如下的示例:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[0:3]) # 第一項:第四項
print(a[3:6]) # 第四項:第七項
print(a[2:7]) # 第三項:第八項

為了在前期幫助大家排除索引從 0 開始計數的干擾,我用注釋標出來了每個索引對應在列表中是第幾項。轉換完後,第幾項就是數字幾,不暈了吧~

輸出內容如下:

[1, 2, 3]
[4, 5, 6]
[3, 4, 5, 6, 7]

我們分析一下結果(不要搞錯索引第 x 項):

  • 當我們輸入的索引0:3 時,輸出的是原列表索引02 的片段
  • 當我們輸入的索引3:6時,輸出的是原列表索引46 的片段
  • 當我們輸入的索引2:7 時,輸出的是原列表索引26 的片段
  • ……
  • 當我們輸入的索引a:b 時,輸出的是原列表索引ab - 1 的片段

為什麼是 b - 1 呢?這就要提到編程中的第二個重要法則(上一個是從零開始計數):左閉右開。即我們傳入 a:b 時,實際上取到的區間為 [ a , b ) [a,b) [a,b) 這樣的左閉右開區間。實在不理解的話,就請先記住吧。

如果在 a:b 中我們缺失了一個參數,Python 會默認截取到字符串的開頭或結尾:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[:3]) # 到索引為3-1=2的位置結束,輸出:[1, 2, 3]
print(a[6:]) # 從索引為6的位置開始,輸出:[7, 8, 9]

自然,我們也可以使用負數索引:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[-6:-4]) # 輸出:[4, 5]
print(a[-3:]) # 輸出:[7, 8, 9]

三維:切片

老規矩,先看程序:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[0:5:2]) # 輸出:[1, 3, 5]
print(a[2:8:3]) # 輸出:[3, 6]

當我們傳入兩個參數 a:b 時,取到的列表大概長這樣:[(a), (a + 1), (a + 2), ..., (b - 2), (b - 1)](x) 表示列表索引為 x 的元素,下同)

如果傳入 a:b:c 三個參數, ab 控制開始和結束位置的功能不變,而 c 定義的是每取完一個元素後增加的步長。如當我們傳入 0:5:2 時,取到的列表為 [(0), (2), (4)] ;當我們傳入 2:8:3 時,取到的列表為 [(2), (5)]

當然,第三個參數 c 也可以是負數,具體實現如下:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[5:0:-2]) # 輸出:[6, 4, 2]
print(a[::-2]) # 輸出:[9, 7, 5, 3, 1]
print(a[::-1]) # 輸出:[9, 8, 7, 6, 5, 4, 3, 2, 1]

你會發現,一維我們叫做索引,而二維、三維我們叫做切片,這是為什麼?因為在只傳遞一個數字時,我們獲取到的是一個元素;而在傳遞兩個及以上的數字時,我們獲取到的是原本的列表的一段子列表,哪怕這個列表的長度為一甚至是零。

字符串切片

與列表大同小異

a = 'HelloWorld'
print(a[0:5]) # Hello
print(a[6:8]) # or
print(a[0:8:2]) # Hloo
print(a[::-1]) # dlroWolleH

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved