从结果上来看,[::-1]的作用是对列表进行翻转,比方说:
a = [1, 2, 3, 4, 5]print(a[::-1])b = "12345"print(b[::-1])
输出:
[5, 4, 3, 2, 1]54321
可以发现这个东西的用法和reversed函数是相同的,只不过更为简洁:
a = [1, 2, 3, 4, 5]print(list(reversed(a)))b = "12345"print("".join(reversed(b)))
输出:
[5, 4, 3, 2, 1]54321
那么这个东西的原理是什么呢?一般来说,我们见过一个冒号的情况比较多,用来做列表切片:
a = [1, 2, 3, 4, 5]print(a[:-1])print(a[1:])print(a[:])
输出:
[1, 2, 3, 4][2, 3, 4, 5][1, 2, 3, 4, 5]
多一个冒号的话,新冒号后面的数字表什么呢?其实是表步长,比如:
a = [1, 2, 3, 4, 5]print(a[:-1])print(a[:-1:])print(a[:-1:1])print(a[:-1:2])
输出:
[1, 2, 3, 4][1, 2, 3, 4][1, 2, 3, 4][1, 3]
步长是正数的话,[a:b]是从a到b,往右读取,b应该比a大;而步长如果改成负数,[a:b]的含义仍然是从a到b,只是往左读取,所以此时b应该比a小,比如:
print(a[3:0:-1])
输出:
[4, 3, 2]
自然而然的,如果不指定a,b,那么处理的范围是整个列表;步长为-1,表示整个列表从右往左读取,即翻转数组。
那么数据是二维的会怎么样呢?直接看例子:
a = [[1, 2], [3, 4]]print(a[::-1])
输出:
[[3, 4], [1, 2]]
这一结果的本质是,切片本身只在数组的第0维去操作,而二维数组的的0维是行,因此会把所有行给逆序。
三维数组的话同理,将第0维逆序:
a = [ [[1, 2],[3, 4]], [[5, 6],[7, 8]] ]
输出:
[ [[5, 6], [7, 8]], [[1, 2], [3, 4]]]
既然涉及到三维,那就可以拓展到图片了。比方说,使用cv2.imread读到的图片是存储在尺寸为(H, W, C)的ndarray里的。如果对图片使用[::-1],相当于对第0维H(height)进行逆序,将图片垂直翻转180度:
import cv2img = cv2.imread("1.jpg")img = img[::-1]cv2.imwrite("2.jpg", img)
翻转前:
翻转后:
来源地址:https://blog.csdn.net/qq_40714949/article/details/127037956