从结果上来看,[::-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度:文章来源:https://www.toymoban.com/news/detail-527505.html
import cv2
img = cv2.imread("1.jpg")
img = img[::-1]
cv2.imwrite("2.jpg", img)
翻转前:
翻转后:
文章来源地址https://www.toymoban.com/news/detail-527505.html
到了这里,关于Python [::-1]的简单理解与用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!