python切片(1)
基本形式:[start:stop]
seq = [7, 2, 3, 7, 5, 6, 0, 1]
print(seq[1:5])
输出:[2,3,7,5]
切片还可以将序列赋值给变量:
seq = [7, 2, 3, 7, 5, 6, 0, 1]
seq[3:4] = [6, 3]
print(seq)
输出:[7,2,3,6,3,5,6,0,1]
起始位置的索引start是包含的,而结束位置的索引stop并不包含,因此元素的数量是stop-start
start和stop可以省略,如果省略,默认传入序列的起始位置或结束位置
print(seq[:5])
输出[7,2,3,6,3]
print(seq[3:])
输出[6,3,5,6,0,1]
负索引可以从序列的尾部进行索引:
print(seq[-4:])
输出[5,6,0,1]
print(seq[-6:-2])
输出[6,3,5,6]
序列 [7, 2, 3, 6, 3, 5, 6, 0, 1]
正索引 0 1 2 3 4 5 6 7 8
负索引 -9 -8 -7 -6 -5 -4 -3 -2 -1
python切片(2)
步进值可以在第二个冒号后使用,意思是每隔多少个数取一个值
seq = [7, 2, 3, 6, 3, 5, 6, 0, 1]
print(seq[::2])
输出:[7, 3, 3, 6, 1]
对列表或者元组进行翻转时,向步进值传-1:
print(seq[::-1])
输出:[1, 0, 6, 5, 3, 6, 3, 2, 7]
numpy数组双冒号::后加步进值-1
import numpy as np
x = np.array([[[1, 2, 3], [4, 5, 6]],
[[1, 2, 3], [4, 5, 6]],
[[11, 22, 33], [14, 22, 33]],
[[11, 22, 33], [14, 22, 33]]
]
)
print('转换前', x)
print(x.shape)
输出:
转换前 [[[ 1 2 3]
[ 4 5 6]]
[[ 1 2 3]
[ 4 5 6]]
[[11 22 33]
[14 22 33]]
[[11 22 33]
[14 22 33]]]
(4, 2, 3)
y = x[:, ::-1, :] #第一个维度不变,第二个维度H翻转,第三个维度不变
print('转换后', y)
print(y.shape)
输出:
转换后 [[[ 4 5 6]
[ 1 2 3]]
[[ 4 5 6]
[ 1 2 3]]
[[14 22 33]
[11 22 33]]
[[14 22 33]
[11 22 33]]]
(4, 2, 3)
p = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
p = np.array(p)
print(p[:, :-1]) # 行不变,列取倒数第二个到最前一个
print(p[:, ::-1]) # 行不变,列翻转
输出:
[[1 2]
[4 5]
[7 8]]
[[3 2 1]
[6 5 4]
[9 8 7]]