Python 裡的 slice 是個很好用的功能。 但有時候要想一下,所以記錄一下各種可能的情況加上例子。
x[i:j:k] 是 list slice 的定義‧ x 是一個一維的 list, 包含有 n 個元素。
i 與 j 是 index, i < j。 k 是跨越index的距離,k >= 1。
x 中的 indices 是等於 i, i + k, i + 2k, i + 3k ... 直到 j,但不包括 j。
當 i 是空的或是 None, i 的預設值是 0。 當 j 是空的或是 None, j 的預設值是 len(x)。
當 i 等於或是大於 j, slice 會回傳空的 list。
In [1]:
#先做一個 List 出來。
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [2]:
# 返回整個 List (x[0:len(x)])
x[:]
Out[2]:
In [3]:
# 像 C 裡的 array, 用 index 來選, Python 是從 index 0 開始
x[5]
Out[3]:
In [4]:
# 從 index 3 到最後 (x[3:len(x)])
x[3:]
Out[4]:
In [5]:
# 從最前到 index 6 - 1 (x[0:6])
x[:6]
Out[5]:
In [6]:
# 從 index 3 到 index 8 - 1
x[3:8]
Out[6]:
In [10]:
# 從 index 2 到 index 7 - 1, 但每次走 2 個 index
# 平常都是走 1 個 index x[2:7] --> [2, 3, 4, 5, 6]
x[2:7:2]
Out[10]:
假如 index 是正整數都還比較容易理解,但 Python 還有負整數的 index。
負的 index 代表從最後面開始數,-1 就是倒數第一,以此類推。
i 是負的可以想成 len(x) + i, j 是負的可以想成 len(x) + j 。
還是用上面的 x 來做例子。
In [12]:
# 倒數第 1 的 index
x[-1]
Out[12]:
In [13]:
# 倒數第 3 的 index
x[-3]
Out[13]:
In [14]:
# 負 0 跟 0 是一樣的
x[-0]
Out[14]:
In [16]:
# 從倒數第 3 的 index 到最後(跟 x[-3:-1] 是不一樣的)
x[-3:]
Out[16]:
In [18]:
# 從最前到倒數 index 5 - 1 (x[0:len(x) + (-5)])
x[:-5]
Out[18]:
In [20]:
# 從倒數第 3 的 index 到最後的 index - 1
x[-3:-1]
Out[20]:
In [21]:
# 違反了 i < j,所以是個空的 list
x[-5:-7]
Out[21]:
In [22]:
# 從倒數 index 7 到 倒數 index 2 - 1, 但每次走 2 個 index
# 平常都是走 1 個 index x[-7:-2] --> [3, 4, 5, 6, 7]
x[-7:-2:2]
Out[22]:
k 也可以是負的,但是就留到下一篇在寫。
Reference 1: Python for Econometrics
Reference 2: Python Doc
Jupyter(IPython) notebook: Link
沒有留言:
張貼留言