Python [::-1]的简单理解与用法

从结果上来看,[::-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 cv2

img = cv2.imread("1.jpg")
img = img[::-1]
cv2.imwrite("2.jpg", img)

翻转前:

翻转后:

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年8月4日
下一篇 2023年8月4日

相关推荐