Python的切片
切片的用法
先举个例子:
lists = [1,2,3,4,5,6,7,8]
n = "Hello,World!"
print(lists[:])
print(lists[0:])
print(lists[:8])
print(lists[:5])
print(lists[:-5])
print(lists[-5:])
print(lists[::-1])
print(n[:])
print(n[0:])
print(n[:8])
print(n[:5])
print(n[:-5])
print(n[-5:])
print(n[::-1])
输出:
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5]
[1, 2, 3]
[4, 5, 6, 7, 8]
[8, 7, 6, 5, 4, 3, 2, 1]
Hello,World!
Hello,World!
Hello,Wo
Hello
Hello,W
orld!
!dlroW,olleH
我认为对比着输出看,就基本上可以看出来切片在这里的用法和效果是怎么样的了
一个切片长这样x[ : : ]里面分别是填 start 、end 、step 当只有一个:时,默认第三个参数 step=1,其绝对值大小决定了切取数据时的步长,正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值,start 和 end 就分别表示,开始位置和结束位置
基本概念差不多就是这些,如果自己上手写一下,尝试一下的话,很快就可以理解
切片的浅拷贝机制
切片操作返回的是原序列的一个浅拷贝,这意味着返回的新序列是一个独立的对象,但其元素是原序列中元素的引用。对于不可变元素(如数字、字符串),这没有问题。但对于可变元素(如列表),修改新序列中的嵌套可变元素会影响到原序列
例如:
a = [1, 2, [3, 4]]
b = a[:]
b[2][0] = 'X'
print(a)
输出:
[1, 2, ['X', 4]]
切片的越界处理
切片的访问与访问单个元素时下标越界会引发 IndexError 不同,切片操作对越界的索引处理得非常宽容,如果 start 或 end 超出了序列的有效范围,Python 会自动将其调整到序列的边界,而不会抛出异常,这种安全且可预测的行为使得切片操作在处理不确定长度的序列时非常稳定
空切片
当 start 大于等于 end 且步长为正,会返回一个空序列,空切片在逻辑上表示一个不包含任何元素的区间。这一特性在某些算法中非常有用,例如,当需要在一个特定位置插入元素时,可以使用 my_list[3:3] = [new_element],这相当于在索引 3 的位置插入了新元素,而不会删除任何原有元素
例如:
lists = [1,2,3,4,5,6]
lists[3:3] = [8]
print(lists)
输出:
[1, 2, 3, 8, 4, 5, 6]
切片的取值范围
切片和 range() 一样他们的取值范围都是左闭右开,“含头不含尾”
例如:
n = "abcdef"
print(n[1:4])
输出:
bcd
切片还有很多的用法,这里讲了切片的一些基本内容。就这样