『無為則無心』Python序列 — 16、字符串的下標和切片


1、序列的概念

序列sequence是Python中最基本的數據結構。指的是一塊可存放多個值的連續內存空間,這些值按一定順序排列,可通過每個值所在位置的編號(稱為索引)訪問它們。

為了更形象的認識序列,可以將它看做是一家旅店,那么店中的每個房間就如同序列存儲數據的一個個內存空間,每個房間所特有的房間號就相當於索引值。也就是說,通過房間號(索引)我們可以找到這家旅店(序列)中的每個房間(內存空間)。

在Python中,常用的序列類型包括字符串列表元組集合字典

提示:

之前我們說Python中不可變數據類型的時候,已經介紹過字符串的一些基礎用法,忘記的可以查看前面的文章。

下面我們說說字符串的更高級一些的用法。

2、字符串的下標說明

(1)下標的概念

“下標”又叫“索引”,就是編號。比如火車的座位號,座位號的作用:按照編號快速找到對應的座位。同理,下標的作用即是通過下標快速找到數據中對應位置的字符。

所以字符串實際上就是字符的數組,如果想使用字符串中某個特定的數據,那么可以通過下標的方法取得。換句話說字符串數據的下標從0開始順序分配一個編號,使用這個編號精確找到某個字符數據。

注意:下標從0開始,向后遞增。

image

(2)快速體驗

需求:字符串name = "abcdef",取到不同下標對應的數據。

name = "abcdef"
# 下標得到的是下標為某個數字所對應的數據
print(name[1])
print(name[0])
print(name[2])

"""
輸出結果
b
a
c
"""

(3)字符串取值的兩種方式

在Python的字符串取值中,有兩種取值方式,即正負取值。

  • 正向下標從0開始,下標值依次遞增。
  • 負向下標從-1開始,下標值依次遞減。

如下圖所示:

image

練習:

name = "abcdef"

print(name[-1])
print(name[-4])
print(name[-2])

"""
輸出結果
f
c
e
"""

3、字符串的切片說明

切片是指對操作的對象截取其中一部分的操作。字符串、列表、元組都支持切片操作。

(1)切片的語法

序列[開始位置下標:結束位置下標:步長]

注意:

  • 不包含結束位置下標對應的數據(截取的規則為“前閉后開”), 正負整數均可。
  • 步長表示,每次獲取元素的間隔,默認步長為1。(可省略不寫)
    步長正負整數均可,不能是0,設置0會直接異常。
  • 做切片操作時,總會返回一個新的列表(字符串,元祖),不會影響原來的列表(字符串,元祖)。
  • 一般創建列表時,變量的名字會使用復數。(我們直接輸出,就不定義變量名了)

(2)示例

# 序列名[開始位置的下標:結束位置的下標:步長]

# 我定義的一個字符串就是從0開始的數字
# 對應着字符串的腳標,方便我們直觀的查看結果。
str1 = '012345678'

# 1.規范截取,可觀察前閉后開
print(str1[2:5:1])  # 234

# 2.驗證步長,為隔幾個字符曲一次值
print(str1[2:5:2])  # 24

# 3.可以不寫步長,默認為1
print(str1[2:5])  # 234

# 4.如果不寫開始,默認從0開始選取
print(str1[:5])  # 01234 

# 5.如果不寫結束,表示從某位置開始,選取到最后。
print(str1[2:])  # 2345678 

# 6.如果不寫開始和結束,表示選取所有。
# 其實相當於創建了一個字符串的副本
print(str1[:])  # 012345678 

# 負數測試
# 1.如果步長為負數,表示倒敘選取
print(str1[::-1])  # 876543210 

# 2.下標-1表示最后一個數據,下標數值向前依次遞減。
# 如下:從倒數第4位到倒數第1位,正向截取,前閉后開。
print(str1[-4:-1])  # 567

"""
 3.終極測試
 從倒數第4位到倒數第1位,從左向右,
 正向截取,前閉后開。
 但是-1步長:是從右向左選取。
 兩個選取方向相反,所以不能選取出數據
"""
print(str1[-4:-1:-1])  # 沒有結果

# 如下修改,從最后1位截取到倒數第4位
# 方向是從后向前,也就是從右到左,
# 步長-1的方向,也是從從右到左。
# 所以可以取到值。
print(str1[-1:-4:-1])  # 876

"""
重點:****
    如果選取方向(下標開始到結束的方向) 和
    步長的方向沖突,
    則無法選取數據。
"""

總結:

這種語法很有用,因為你經常需要在不知道列表長度的情況下訪問最后的元素。這種約定也適用於其他負數索引,例如,索引-2返回倒數第二個列表元素,索引-3返回倒數第三個列表元素,以此類推 。

(3)補充示例

# 1.做切片操作時,總會返回一個新的列表,不會影響原來的列表。
stus = ['孫悟空','豬八戒','沙和尚','唐僧','蜘蛛精','白骨精']
new_stus = stus[0 :3]
print(stus)
print(new_stus)

"""
輸出結果:
['孫悟空', '豬八戒', '沙和尚', '唐僧', '蜘蛛精', '白骨精']
['孫悟空', '豬八戒', '沙和尚']
"""

# 步長不能設置為0
# 結果:ValueError: slice step cannot be zero
print(stus[0 :3 : 0]) # 異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM