slice

slice適用於有順序且可以用索引位置取得元素的資料結構,如: list, tuple, string。

語法

有順序的資料結構[開始索引:結束索引:step]

使用分號:區隔。

會取出的索引介於 開始索引 <= 索引 < 結束索引。

注意!不包含結束索引。

開始索引不寫,預設為0。

結束索引不寫,預設為字串的長度或list的長度。

step預設為1,可以不填,預設為1就是一個一個取出來,若step為2,會間隔一格,再取。

字串

字串使用slice,傳回的類型為新的字串,不會影嚮原本的字串。

語法:

字串[開始索引:結束索引:step]

間隔為1

以下的程式碼會取出索引1至2的字母,不包含結束索引3的字串。
step不寫,預設為1。

索引 0 1 2 3 4
字串 H e l l o
取出   x x    
1
2
3
str1 = "Hello"
result = str1[1:3]
print(f"result = {result}, type = {type(result)}")
result = el, type = <class 'str'>

間隔為2

以下取出索引0到4,不包含結束索引5,間隔為二格。

索引 0 1 2 3 4
字串 H e l l o
取出 x   x   x
1
2
3
str1 = "Hello"
result = str1[0:5:2]
print(f"result = {result}, type = {type(result)}")
result = Hlo, type = <class 'str'>

結束索引不寫

結束索引不寫,預設為字串長度len(str)。

索引 0 1 2 3 4
字串 H e l l o
取出     x x x
1
2
3
str1 = "Hello"
result = str1[2:]
print(f"result = {result}, type = {type(result)}")
result = llo, type = <class 'str'>

開始索引不寫

開始索引不寫,預設為0,結束索引不寫,預設為字串長度 len(str) 。

索引 0 1 2 3 4
字串 H e l l o
取出 x   x   x
1
2
3
str1 = "Hello"
result = str1[::2]
print(f"result = {result}")
result = Hlo

反向截取

若開始索引為-1,代表從尾部開始取值。
若開始索引為負,結束索引與step也要為負。

索引 -5 -4 -3 -2 -1
字串 H e l l o
取出 x x x x x

以下從尾部索引-1開始取值,直到-5結束。

1
2
3
str1 = "Hello"
result = str1[-1:-6:-1]
print(f"result = {result}")
result = olleH

若結束索引不填,此範例預設為-6。

1
2
3
str1 = "Hello"
result = str1[-1::-1]
print(f"result = {result}")
result = olleH

間隔為-2。

索引 -5 -4 -3 -2 -1
字串 H e l l o
取出 x   x   x
1
2
3
str1 = "Hello"
result = str1[-1::-2]
print(f"result = {result}")
result = olH

list

除了string外,也可以使用在list中。

取得開始索引為1至3,不包含索引4,間隔為1,傳回值類型為list。

1
2
3
list1 = ["Tom", "Joy", "Jack", "Mary", "Alex", "Alice"]
newlist = list1[1:4]
print(f"newlist: {newlist}, type = {type(newlist)} ")
newlist: ['Joy', 'Jack', 'Mary'], type = <class 'list'> 

反向取得元素。
開始索引為-1,結束索引為-7,間隔為-2。

1
2
3
list1 = ["Tom", "Joy", "Jack", "Mary", "Alex", "Alice"]
newlist = list1[-1::-2]
print(f"newlist: {newlist} ")
newlist: ['Alice', 'Mary', 'Joy']

list.reverse() 翻轉與 slice 比較

使用list.reverse()會把原list的元素全部翻轉。

1
2
3
list1 = ["Tom", "Joy", "Jack", "Mary", "Alex", "Alice"]
list1.reverse()
print(f"list1 = {list1} ")
list1 = ['Alice', 'Alex', 'Mary', 'Jack', 'Joy', 'Tom'] 

使用 slice 不會影嚮原本的list,會傳回「新」的list。

1
2
3
list1 = ["Tom", "Joy", "Jack", "Mary", "Alex", "Alice"]
print(f"slice = {list1[-1::-1]} ")
print(f"list1 = {list1}")
slice = ['Alice', 'Alex', 'Mary', 'Jack', 'Joy', 'Tom'] 
list1 = ['Tom', 'Joy', 'Jack', 'Mary', 'Alex', 'Alice']

tuple

把前一個範例改成tuple,也適用於tuple。

1
2
3
tuple1 = ("Tom", "Joy", "Jack", "Mary", "Alex", "Alice")
print(f"slice = {tuple1[-1::-1]} ")
print(f"list1 = {tuple1}")
slice = ('Alice', 'Alex', 'Mary', 'Jack', 'Joy', 'Tom') 
list1 = ('Tom', 'Joy', 'Jack', 'Mary', 'Alex', 'Alice')

results matching ""

    No results matching ""