zoukankan      html  css  js  c++  java
  • python序列(五)切片操作

      功能:截取列表中的任何部分。

      切片适用于列表、元组、字符串、range对象等类型。。

      格式:[::]切片使用两个冒号分隔的3个数字来完成。

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

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

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

     1.切片操作不会因为下标越界而抛出异常,而是简单地在列表尾部截断或者返回一个空列表。  

    >>> alist=[1,2,3,4,5,6,7,8,9,0,]
    >>> alist[::]    #返回包含元素的新列表
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    >>> alist[::-1]   #逆序的所有元素
    [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    >>> alist[::2]    #偶数位置,隔一个取一个
    [1, 3, 5, 7, 9]
    >>> alist[1::2]    #奇数位置,隔一个取一个
    [2, 4, 6, 8, 0]
    >>> alist[3::]    #从下标3开始的所有元素
    [4, 5, 6, 7, 8, 9, 0]
    >>> alist[3:6]    #下标在[3,6]之间的所有元素
    [4, 5, 6]
    >>> alist[0:100:1]  #前100个元素,自动截断
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    >>> a[100:]      #下标100之后的所有元素,自动截断
    []
    >>> x[100]      #直接使用下标访问会发生越界
    Traceback (most recent call last):
      File "<pyshell#131>", line 1, in <module>
        x[100]
    IndexError: list index out of range

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

    >>> alist
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
    >>> alist[len(alist):]=[9]    #在尾部追加元素
    >>> alist
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9]>>> alist[:3]=[3,2,1]      #替换前三个元素
    >>> alist
    [3, 2, 1, 4, 5, 6, 7, 8, 9, 0, 9]
    >>> alist[:3]=[]          #删除前三个元素
    >>> alist
    [4, 5, 6, 7, 8, 9, 0, 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]  
    >>> alilst[::2]=[0]*3        #切片不连续,两个元素个数必须一样多
    Traceback (most recent call last):
      File "<pyshell#153>", line 1, in <module>
        alilst[::2]=[0]*3
    NameError: name 'alilst' is not defined

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

    >>> alist=[3,4,5,6,7,]
    >>> del alist[:3]      #删除前三个元素
    >>> alist
    [6, 7]
    >>> alist=[3,4,5,6,7]  
    >>> del alist[::2]    #删除偶数位置上的元素
    >>> alist
    [4, 6]

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

    >>> alist=[3,5,7]
    >>> blist=alist
    >>> blist
    [3, 5, 7]
    >>> blist[1]= 8
    >>> alist
    [3, 8, 7]
    >>> alist==blist
    True
    >>> alist is blist
    True
    >>> id(alist)
    2848177707136
    >>> id(blist)
    2848177707136

      5.浅复制是把原列表中所有元素的引用都复制都信列表中

      原列表中只包含整数、实数、复数等基本类型或元组、字符串这样的不可变类型的数据,一般是没有问题的。

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

    >>> alist=[1,2,3]
    >>> blist=alist[::]      #切片,浅复制
    >>> alist==blist        #两个列表的元素完全一样
    True
    >>> alist is blist        #但不是同一个对象
    False
    >>> id(alist)==id(blist)    #内存地址不一样
    False
    >>> blist[1]=8          #修改一个不会影响另一个
    >>> blist
    [1, 8, 3]
    >>> alist
    [1, 2, 3]
  • 相关阅读:
    uniDAC 8.4.1一个严重的bug
    Delphi Event Bus进阶(三)如何使用通道?
    从delphi 10.3到delphi 10.4的改变实务
    uniDAC 8.4.1 database is locked
    调整Delphi IDE代码的行间距
    Deployment Manager now Open Source
    Delphi 10.4.2 Android 64位发布格式之App Bundle格式aab
    每日日报79
    每日日报78
    团队冲刺博客(四)
  • 原文地址:https://www.cnblogs.com/wang-yongxu/p/12539905.html
Copyright © 2011-2022 走看看