切片
切片的定义:
通过索引区间访问线性结构的一段数据。实际就是通过指定索引截取指定数据
- 语法:【sequence[start:stop:step]–> newsequence】
- sequence:线性结构的可迭代对象
- start: 起始索引
- stop: 结束索引
- step: 步长默认为1,可正,可负
- 返回newsequence:返回一个新的可迭代的线性结构对象
切片支持正负索引,超过上边界(右边界),就取到末尾;超过下边界(左边界)从开头开始取 - start一定要在stop左边
- [:]表示从头至尾,全部元素被取出,等效于copy()方法
- 示例1:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
arr1 = arr[1:6:2] #表示将下标为1的位置开始,到下标为6的位置结束(不包含6所在下标位置),步长为2,拷贝一个新列表给arr1 #会返回一个新列表
print("arr1 = {}".format(arr1))
- 示例2:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
arr2 = arr[:] #拷贝整个arr列表赋值给arr2.相当于copy方法
print("arr2 = {}".format(arr2))
- 示例3:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
arr3 = arr[::-1] #将arr列表中,从-1,到-len(arr)-1 步长为-1 ,拷贝一个新列表给arr3 等价于 arr[-1:-len(arr)-1:-1]
print("arr3 = {}".format(arr3))
- 示例4:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
arr4 = arr[:-3] #将arr列表中,取值索引范围是[0,-3)区间内的值拷贝给arr4
print("arr4 = {}".format(arr4))
- 示例5:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
arr5 = arr[-5::-1] #将arr列表中[-5,-len(arr)-1)步长为-1 反向拷贝一个新列表到arr5中
print("arr5 = {}".format(arr5))
- 示例6:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
arr6 = arr[-5:-1] ##将arr列表中[-5,-1)步长为1 拷贝一个新列表到arr6中
print("arr6 = {}".format(arr6))
切片赋值
- 切片操作写在等号左边,被插入值(可跌打对象)写在等号右边
- 语法:【sequence1[start:stop:step] = sequence2[start:stop:step]直接在sequence1上修改】
- sequence1,sequence2 线性结构的可迭代对象
- start 替换的起始位置
- stop 替换的结束位置
- step 步长
- 切片赋值中,等号右边必须是可迭代对象。切片赋值时直接在原对象中修改。
- 切片赋值中,等号左边是需要替换的元素,等号右边是准备替换的新元素。如果需要替换的元素不是连续的一块位置。那么等号左边需要替换的元素数量必须要和等号右边要替换的新元素个数相等。
- 切片赋值中,如果步长不为1或者-1那么切割后会出现多个断裂层,此时插入的元素个数必须要与断裂层个数匹配
- 切片赋值中会直接在等号左边可迭代对象中修改。不会生成新的可迭代对象。
- 示例1:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
print("arr = {} \t id = {}".format(arr,id(arr)))
lst = list(b"abcd")
arr[:] = b"abcd" #吧arr集合中范围为:[0,len(arr))的元素全部替换成 b"abcd"可迭代对象中的元素。
print("arr = {} \t id = {}".format(arr,id(arr)))
print("lst = {}".format(arr,list(b"abcd")))
- 示例2:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
print("arr = {} \t id = {}".format(arr,id(arr)))
arr[2:] = b"abcd" #吧arr集合中范围为:[2,len(arr))的元素全部替换成 b"abcd"可迭代对象中的元素。
print("arr = {} \t id = {}".format(arr,id(arr)))
- 示例3:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
print("arr = {} \t id = {}".format(arr,id(arr)))
arr[:2] = b"abcd" #吧arr集合中范围为:[0,2)的元素全部替换成 b"abcd"可迭代对象中的元素。
print("arr = {} \t id = {}".format(arr,id(arr)))
- 示例4:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
print("arr = {} \t id = {}".format(arr,id(arr)))
arr[1:9] = b"abcd" #吧arr集合中范围为:[1,9)的元素全部替换成 b"abcd"可迭代对象中的元素。
print("arr = {} \t id = {}".format(arr,id(arr)))
- 示例11:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
print("arr = {} \t id = {}".format(arr,id(arr)))
#arr[1:9:2] = ["a","b"] #注意此时,会将arr中 2,4,6,8 删除,会出现4个空位。而插入的元素只有两个。会报错。
arr[1:9:2] = ["a","b","c","d"] #会将arr中 2,4,6,8 删除。并在对应位置替换成a,b,c,d
print("arr = {} \t id = {}".format(arr,id(arr)))
- 示例12:
arr = [1,2,3,4,5,6,7,8,9,10] #定义一个列表
print(arr[2:],arr[5:],id(arr),sep="\t")
arr[2:] = arr[5:] #将arr元素中范围是[2:len(arr))的元素全部替换成 [6, 7, 8, 9, 10]里面的元素
print(arr,id(arr),sep="\t")
线性结构
- 可迭代for….in
- len()可以获取长度
- 通过下标可以访问
- 可以切片
常用线性结构
- 列表(list)、元组(tuple)、字符串(str)、bytes 、bytearray