• Python学习系列之列表增删改操作(十一)


    一、为什么需要列表

    • 变量可以存储一个元素,而列表是一个"大容器"可以存储N多个元素,程序可以方便地对这些数据进行整体操作
    • 列表相当于其它语言中的数组

    二、列表的创建
    1.列表需要使用中括号[],元素之间使用英文的逗号进行分隔

    比如:

    a=10    #变量存储的是一个对象的引用
    list1=['hello','world',98]   #列表存储的是多个对象的引用,将列表创建好后赋值给对象list1

    2.列表的创建方式:

    • 使用中括号
    • 调用内置函数list()

    2.1 使用中括号创建:

    lst=['hello','world',98]
    

    2.2 使用内置函数list()创建:

    lst2=list(['hello','world',98]) 

    三、列表的特点

    列表的特点:

    • 列表元素按顺序有序排序
    • 索引映射唯一一个数据
    • 列表可以存储重复数据
    • 任意数据类型混存
    • 根据需要动态分配和回收内存

    四、获取列表指定元素的索引

    1.获取列表中指定元素的索引

    • 使用index()函数
    1. 如查列表中存在N个相同元素,只返回相同元素中的第一个元素的索引
    2. 如果查询的元素在列表中不存在,则会跑出ValueError
    3. 还可以在指定的start和stop之间进行查找

    比如:

    lst=['hello','world',98,'hello']
    print(lst.index('hello'))   #当list中有两个相同元素时,会取第一个元素的索引
    

      执行结果如下:

     解析:如查列表中存在N个相同元素,只返回相同元素中的第一个元素的索引

    2.获取列表中不存在的元素会报ValueError

    lst=['hello','world',98,'hello']
    print(lst.index('python'))
    

      执行结果如下:

     解析:python在列表lst中不存在,所以在列表中查找'python'的索引会报错

    3.在指定的start和stop之间进行查找

    比如:

    lst=['hello','world',98,'hello']
    print(lst.index('hello',1,4))
    

      执行结果如下:

     如果步长的值中不存在改值时,则会报错,比如:

    lst=['hello','world',98,'hello']
    print(lst.index('hello',1,3))
    

      执行结果如下:

     解析:1-3的步长中只包含1和2的位置,对应的值是'world'和98

    五、获取列表中指定的元素

    获取列表中的单个元素:

    • 正向索引从0到N-1,举例:lst[0]
    • 逆向索引从-N到-1,举例:lst[-N]
    • 指定索引不存在,跑出IndexError

    比如:

    lst=['hello','world',98,'hello']
    print(lst[2])
    print(lst[-3])
    

      执行结果如下:

     解析:正向索引是从0开始的,[2]表示获取第三个,第三个的值是98,逆向索引是从-N到-1,即从最后一个'hello'的索引是-1算起,[-3]索引的值为'world'

    lst=['hello','world',98,'hello']
    print(lst[5])
    

      执行结果:

     解析:列表lst对象中共4个元素,正向索引包含0,1,2,3,索引5不存在,所以当输出索引5的值时会报IndexError

    六、列表元素的查询操作

    获取列表中的多个元素
    语法格式:
    列表名[start:stop:step]
    切片操作:

    • 切片的结果,原列表片段的拷贝
    • 切片的范围,[start,stop]

    step默认为1,简写为[start,stop]
    step为正数,[:stop:step] ,切片的第一个元素默认是列表的第一个元素,从start开始往后计算切片
    step为正数,[start::step],切片的最后一个元素默认是列表的最后一个元素,从start开始往后计算切片
    step为负数,[:stop:step],切片的第一个元素默认是列表的最后一个元素,从start开始往前计算切片
    step为负数,[start::step],切片的最后一个元素默认是列表的第一个元素,从start开始往前计算切片

    举例:

    #[start:stop:step]
    lst1=[10,20,30,40,50,60,70,80,90]
    print(lst1[0:6])  #省去步长,步长默认为1,最后一位值的index为5,所以打印出:10,20,30,40,50,60
    print(lst1[0:6:2])  #打印从index为0开始,最后一个是index为5,步长为2的数据,打印结果为:10,30,50
    
    print(lst1[:6:1]) #不输入start,打印起始index为0,最后一个是index为5,步长为1的数据,打印结果是:10,20,30,40,50,60
    
    print(lst1[0::2]) #不输入stop,打印起始index为0,步长为2的列表值,打印结果为:10, 30, 50, 70, 90
    

      执行结果如下:

     解析:见print语句后的注释

    七、列表元素的判断及遍历

    1.列表元素的判断

    判定指定元素在列表中是否存在
    元素 in 列表名
    元素 not in 列表名

    举例:

    lst2=[10,20,'hello','python']
    print(10 in lst2)
    print(10 not in lst2)
    

      执行结果如下:

     解析:10在列表中,所以第一个Print的结果为True,第二个print的结果是False

    2.列表元素的遍历

    语法结构:
    for 迭代变量 in 列表名:
    执行体

    举例:

    lst2=[10,20,'hello','python']
    for item in lst2:
        print(item)
    

      执行结果如下:

     解析:for循环将lst2中的每个值赋值给item,然后将item打印出来,得到的是lst2列表中的所有值

    八、列表元素的增删改查

    1.列表元素的增加操作

     1.1 append()举例:

    #列表增加操作,增加操作只是在列表的末尾添加一个元素,内存id不会改变
    lst=['hello','world',98]
    print('增加前:',lst,id(lst))
    lst.append(100)
    print('增加后:',lst,id(lst))
    

      执行结果如下:

     解析:append操作不会改变列表对象的内存id,只会在列表的最后一个位置新增一个内存位置来存储值。

    1.2 extend()举例

    #extend
    lst=[10,20,30]
    lst1=['hello','world']
    lst.append(lst1)
    print(lst)
    lst.extend(lst1)
    print(lst)
    

      执行结果如下:

     解析:使用append方法,是将整个lst1列表中的值作为一个元素存储到lst列表中,使用extend方法,是将lst1中的值取出来一个一个存到lst列表中

    1.3 insert()举例:

    #insert(),在列表任意位置添加元素
    lst=[10,20,30]
    lst.insert(1,90)    #在索引为1的位置上添加90这个元素
    print(lst)
    

      执行结果如下:

     解析:index为1的位置插入90,就是在索引为0的位置之后插入一个值为90的元素,后面值的index值往后移

    1.4 切片举例

    #切片,在任意位置上添加N个元素
    lst=[10,20,30]
    print(lst)
    lst3=['hello','world']
    lst[1:]=lst3
    print(lst)
    

      执行结果如下:

     解析:lst[1:]表示将lst列表中index为1及其以后的所有数据都用lst3的值来替换,切片后,lst中20,30的值都被lst3中的'hello','world'替代,所以最终lst列表中存的值是[10,'hello','world']

    2.列表元素的删除操作

     2.1 remove()举例:

    #删除列表元素
    #使用remove()
    lst=[10,20,30,40,50]
    print('删除前:',lst)
    lst.remove(20)
    print('删除后:',lst)
    

      执行结果:

     解析:remove()直接删除列表里的元素,删除成功后列表值会减少已删除的值

    2.2 pop()删除举例:

    #pop()根据索引移除元素
    lst=[10,20,30,40,50]
    print('删除前:',lst)
    lst.pop(2)
    print('删除后:',lst)
    

      执行结果如下:

     解析:lst.pop(2)表示删除索引为2的值即删除30,所以删除后的列表中没有30这个元素

    如果pop()不指定索引,将删除列表中的最后一个元素
    #如果pop()不指定索引,将删除列表中的最后一个元素
    lst=[10,20,30,40,50]
    print('删除前:',lst)
    lst.pop()
    print('删除后:',lst)
    

      执行结果如下:

     解析:如果pop()不指定索引,将删除列表中的最后一个元素,lst列表中最后一个元素是50,则执行pop()后lst列表中没有50这个元素

    2.3 切片

    切片删除表示至少删除一个元素,将产生一个新的列表对象

    举例:

    #切片,删除至少一个元素,将产生一个新的列表对象
    lst=[10,20,30,40,50]
    new_list=lst[1:3]
    print('原列表:',lst,id(lst))
    print('新列表:',new_list,id(new_list))
    

      执行结果如下:

     解析:new_list=lst[1:3]表示将lst列表中索引为1和2的值单独拿出来,放到new_list列表中,lst列表中索引为1和2的值分别是20和30,故new_list的值是20,30,从后面输出的对象id可以看出,lst和new_list是两个不同的对象

     如果不想产生新列表对象,则可以使用[]空列表来替代要删除的部分,如下:

    lst=[10,20,30,40,50,60,70,80,90]
    print(id(lst))
    lst[1:5]=[]
    print(lst,id(lst))
    

      执行结果如下:

     解析:索引为1-4的值是20,30,40,50,将此部分的值替换为空,lst列表只剩下10,60,70,80,90,列表指向的内存id没有变化,还是原列表地址,之不过列表长度缩短了

     2.4 使用clear()方法删除

    举例:

    #clear()方法删除整个列表的值
    lst=[10,20,30,40,50,60,70,80,90]
    lst.clear()
    print(lst)
    

      执行结果如下:

    解析:使用clear()方法仅仅只是删除列表中的值,是列表成为一个空列表,此时并不会释放内存空间

    2.5 使用del删除整个列表

     举例:

    #del删除列表
    lst=[10,20,30,40,50,60,70,80,90]
    del lst
    print(lst)
    

      执行结果如下:

     解析:当使用del将列表对象删除后,内存空间释放,所以会报NameError,提示列表未定义即内存中没有这个列表,表示删除成功

     3.列表元素的修改

    列表元素的修改操作:

    • 为指定索引的元素赋予一个新值
    • 为指定的切片赋予一个新值

    3.1 为指定索引的元素赋予一个新值

    举例:

    #一次修改一个值,即通过索引修改索引的值
    lst=[10,20,30,40]
    lst[2]=100
    print(lst)
    

      执行结果如下:

     解析:lst[2]=100表示将lst列表中索引为2对应的值替换成100,索引为2对应的值是30,所以最终结果是10,20,100,40

    3.2 为指定的切片赋予一个新值

    #为指定的切片赋一个新值
    lst=[10,20,30,40]
    lst[1:3]=[222,333]
    print(lst)
    

      执行结果如下:

     解析:表达式:lst[1:3]=[222,333]表示将lst列表中索引为1和2对应的值替换为222,333,所以最终结果值是10,222,333,40

    以上,就是Pyhton中列表元素的增删改查

  • 相关阅读:
    扫描线
    Assign the task HDU
    Can you answer these queries? HDU
    Tunnel Warfare HDU
    Mayor's posters POJ
    not friendly,
    招财铃:即时通信 openfire ,
    不再是可怕的汇编,
    转:宏指令,
    build path,
  • 原文地址:https://www.cnblogs.com/wx170119/p/14041564.html
走看看 - 开发者的网上家园