python 切片操作

发布时间:2022-05-12 09:45:16 人气:188 作者:多测师

  切片适用于列表、元组、字符串、range对象等类型,但作用于列表时功能最强大。可以使用切片来截取列表中的任何部分,得到一个新列表,也可以通过切片来修改和删除列表中部分元素,甚至可以通过切片操作为列表对象增加元素。

  切片使用2个冒号分隔的3个数字来完成:

  第一个数字表示切片开始位置(默认为0)。

  第二个数字表示切片截止(但不包含)位置(默认为列表长度)。

  第三个数字表示切片的步长(默认为1),当步长省略时可以顺便省略最后一个冒号。

  切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表,代码具有更强的健壮性。

  >>> aList = [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]

  >>> aList[::] #返回包含所有元素的新列表

  [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]

  >>> aList[::-1] #逆序的所有元素

  [17, 15, 13, 11, 9, 7, 6, 5, 4, 3]

  >>> aList[::2] #偶数位置,隔一个取一个

  [3, 5, 7, 11, 15]

  >>> aList[1::2] #奇数位置,隔一个取一个

  [4, 6, 9, 13, 17]

  >>> aList[3::] #从下标3开始的所有元素

  [6, 7, 9, 11, 13, 15, 17]

  >>> aList[3:6] #下标在[3, 6)之间的所有元素

  [6, 7, 9]

  >>> aList[0:100:1] #前100个元素,自动截断

  [3, 4, 5, 6, 7, 9, 11, 13, 15, 17]

  >>> aList[100:] #下标100之后的所有元素,自动截断

  []

  >>> aList[100] #直接使用下标访问会发生越界

  IndexError: list index out of range

  可以使用切片来原地修改列表内容

  >>> aList = [3, 5, 7]

  >>> aList[len(aList):] = [9] #在尾部追加元素

  >>> aList

  [3, 5, 7, 9]

  >>> aList[:3] = [1, 2, 3] #替换前3个元素

  >>> aList

  [1, 2, 3, 9]

  >>> aList[:3] = [] #删除前3个元素

  >>> aList

  [9]

  >>> aList = list(range(10))

  >>> aList

  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  >>> aList[::2] = [0]*5 #替换偶数位置上的元素

  >>> aList

  [0, 1, 0, 3, 0, 5, 0, 7, 0, 9]

  >>> aList[::2] = [0]*3 #切片不连续,两个元素个数必须一样多

  ValueError: attempt to assign sequence of size 3 to extended slice of size 5

  使用del与切片结合来删除列表元素

  >>> aList = [3,5,7,9,11]

  >>> del aList[:3] #删除前3个元素

  >>> aList

  [9, 11]

  >>> aList = [3,5,7,9,11]

  >>> del aList[::2] #删除偶数位置上的元素

  >>> aList

  [5, 9]

python 切片操作

  切片返回的是列表元素的浅复制

  >>> aList = [3, 5, 7]

  >>> bList = aList #bList与aList指向同一个内存

  >>> bList

  [3, 5, 7]

  >>> bList[1] = 8 #修改其中一个对象会影响另一个

  >>> aList

  [3, 8, 7]

  >>> aList == bList #两个列表的元素完全一样

  True

  >>> aList is bList #两个列表是同一个对象

  True

  >>> id(aList) #内存地址相同

  19061816

  >>> id(bList)

  19061816

  所谓浅复制,是指生成一个新的列表,并且把原列表中所有元素的引用都复制到新列表中。如果原列表中只包含整数、实数、复数等基本类型或元组、字符串这样的不可变类型的数据,一般是没有问题的。

  >>> aList = [3, 5, 7]

  >>> bList = aList[::] #切片,浅复制

  >>> aList == bList #两个列表的元素完全一样

  True

  >>> aList is bList #但不是同一个对象

  False

  >>> id(aList) == id(bList) #内存地址不一样

  False

  >>> bList[1] = 8 #修改其中一个不会影响另一个

  >>> bList

  [3, 8, 7]

  >>> aList

  [3, 5, 7]

  如果原列表中包含列表之类的可变数据类型,由于浅复制时只是把子列表的引用复制到新列表中,这样的话修改任何一个都会影响另外一个。

  >>> x = [1, 2, [3,4]]

  >>> y = x[:]

  >>> x[0] = 5

  >>> x

  [5, 2, [3, 4]]

  >>> y

  [1, 2, [3, 4]]

  >>> x[2].append(6)

  >>> x

  [5, 2, [3, 4, 6]]

  >>> y

  [1, 2, [3, 4, 6]]

  以上内容为大家介绍了python 切片操作,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注多测师。https://www.e70w.com/xwzx/


返回列表
在线客服
联系方式

热线电话

17727591462

上班时间

周一到周五

二维码
线