從字面我們可以了解到關于python切片,肯定是和分割有關系,那具體是怎麼使用的呢?有沒有小夥伴在腦海中有個印象?話不多說,還是由小編給大家展示下最簡單的案例,教大家快速上手,趕緊來了解下呀~
Python的清單還有一種用法通過索引值可以一次擷取多個元素,這種叫做清單分片(slicing),分片就是從原有的清單中切分一部分下來,但是原來的清單保持不變。
示例圖檔:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CO1YDZ4ITZzkTNzgjMxIjM4MmY3cTNiFmN2M2YiJzYz8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
從執行結果中我們可以看到mynames的資料拷貝的names的index為1和2的元素即Jack,Rose,names[1:3]就是切分清單names中的index為1和2的元素,但是不包含index為3的元素
我們來看一組代碼:```python
# 以li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]為例
```
1.當所需要的的元素是某單個元素時```python
print(li[1])
# 2
print(li[9])
# 10
print(li[-5])
# 6
# 前面已經說過了,當我們需要取出清單中某一個值的時候就可以使用它的索引來進行取出
```
2.當所需要将清單進行倒置時```python
print(li[::-1])
# [10,9,8,7,6,5,4,3,2,1]
```
3.當起始索引和結束索引都為正的時候```python
print(li[1:5])
# [2,3,4,5]
# 步長為空預設為1 從左往右取值 起始索引1到結束索引5同樣表示的是從左往右取值
print(li[8:2])
# []
"""
沒有錯 就是空清單,步長省略表示預設為1,從左往右取值,但是起始索引和結束索引同為正,卻是從8到2表示從右往左取值,是以為空
"""
print(li[1:5:-1])
# []
"""
同樣是空清單,因為當步長為-1表示從右往左取值,而起始索引和結束索引則都為正表示從左往右取值,兩者沖突取不到值
"""
print(li[:5:-1])
# [10,9,8,7]
"""
步長為-1,表示從右往左取值,而起始索引沒有寫表示從起始開始,而因為是是從右往左取值,是以這個起始位置就是10,及索引為9到索引為5(不包括5)之間的元素
"""
```
4.當起始索引和結束索引都為負的時候```python
print(li[-1:-7])
# []
"""
步長預設為1,從左往右取值,而起始索引-1到結束索引-6決定了從右往左取值,兩者沖突,是以為空。
索引-1在-6的右邊
"""
print(li[-5::-1])
# [6, 5, 4, 3, 2, 1]
# 步長為-1,從右往左取值,從起始索引-5開始,一直取到“起點”。
```
5.起始索引和結束索引正( )負(-)混合索引的情況```python
print(li[1:-7:-1])
# []
'''
起始索引1在結束索引-7的左邊,是以從左往右取值,但步長為-1則決定了從右往左取值,兩者沖突,是以為空。
'''
print(li[-1:7:-1])
# [10, 9]
# 起始索引-1在結束索引7的右邊,是以從右往左取值,而步長-1同樣決定了從右往左取值,是以結果正确
```
6.多層清單切片```python
print(li[:9][3:7][-1:])
# [7]
"""
相當于:
li[:9] =[1, 2, 3, 4, 5, 6, 7, 8, 9]
li[:9][3:7] =[4, 5, 6, 7]
li[:9][3:7][-1:]=[7]
理論上是可以無限的進行多層切片,隻要上一次的切片結果不為空
"""
```
7.取奇偶數```python
# 我們可以通過切片來進行取出li中的奇數和偶數
# 奇數
print(li[::2])
# [1, 3, 5, 7, 9]
print(li[1::2])
# [2, 4, 6, 8, 10]
8.替換一部分值```python
lip[2:6] = [6,6,6,6]
print(li)
# [1, 2, 6, 6, 6, 6, 7, 8, 9, 10]
```
總結:
清單切片的方向取決于起始索引、結束索引以及步長,當起始索引在結束索引右邊是就是從右往左取值,同理反之。
當清單通過索引取單個元素時傳回的是這個元素而非一個清單,當取連續的幾個值時傳回的是一個清單。
如需了解更多python實用知識,點選進入JQ教程網Python大全。