区分Python [-x], [-x:], [:], [:-x], [::-1], [x::-1]
[-x] 表示 列表的倒数第 x 个元素
numbers = [1, 2, 3, 4, 5, 6]
print(numbers[-1]) # 倒数第一个元素 6
print(numbers[-2]) # 倒数第二个元素 5
[-x:] 表示 最后 x 个元素构成的切片
numbers = [1, 2, 3, 4, 5, 6]
print(numbers[-1:]) # 最后一个元素构成的切片 [6]
print(numbers[-2:]) # 最后两个元素构成的切片 [5, 6]
[:] 表示 整个列表(用于复制列表)
numbers = [1, 2, 3, 4, 5, 6]
new_numbers = numbers[:]
print(new_numbers) # 完整列表[1,2,3,4,5,6]
[:-x] 表示 除了最后 x 个元素构成的切片
numbers = [1, 2, 3, 4, 5, 6]
print(numbers[:-1]) # 除了最后一个元素构成的切片 [1, 2, 3, 4, 5]
print(numbers[:-2]) # 除了最后两个元素构成的切片 [1, 2, 3, 4]
[::-1] 表示 列表翻转
numbers = [1, 2, 3, 4, 5, 6]
print(numbers[::-1]) # 列表翻转 [6, 5, 4, 3, 2, 1]
详细原因:
列表的使用规则:
Sequence[start : end : step]
step 步长的默认值为1
numbers = [1, 2, 3, 4, 5, 6]
print(numbers[::])
# 输出整个列表 [1, 2, 3, 4, 5, 6]
print(numbers[::2])
# 以步长为 2 输出列表 [1, 3, 5]
print(numbers[1::2])
# 从下标为 1 开始以步长为 2 输出列表 [2, 4, 6]
那么如果将列表的步长设置为为 负数,就会起到列表翻转的功能
numbers = [1, 2, 3, 4, 5, 6]
print(numbers[::-1])
# 步长为 -1 反着走 输出 [6, 5, 4, 3, 2, 1]
print(numbers[::-2])
# 输出 [6, 4, 2]
print(numbers[::-3])
# 输出 [6,3]
注意: 当把步长设置为 -1 时, start 和 end 的顺序也会发生改变
numbers = [1, 2, 3, 4, 5, 6]
print(numbers[2:5:-1])
# 输出的结果是 [] 因为 start 与 end 的顺序反了
# 当步长为 -1 即反向走时,应该从下标大的走向下标小的
print(numbers[5:2:-1])
# 正确输出 [6, 5, 4]
print(numbers[2:5][::-1])
# 正确输出 [6, 5, 4]
# 第二种输出 相当于先复制一份 numbers 的切片,然后再对切片进行倒置
[x::-1] 表示 列表从下标 x 元素开始进行翻转 ( 注意是下标为 x ,而不是第 x 个元素) ( 向前翻转 )
numbers = [1, 2, 3, 4, 5, 6]
print(numbers[2::-1]) # 从下标为 2 开始翻转 [3, 2, 1]
print(numbers[3::-1]) # 从下标为 3 开始翻转 [4, 3, 2, 1]
原文:https://www.cnblogs.com/AlanHe/p/12334757.html