zoukankan      html  css  js  c++  java
  • 011,列表2

    011,列表2

     从列表中获取元素:
    跟数组一样,我们可以通过元素的索引值(index)从列表获取单个元素,注意:列表索引值是从0开始的。如以下这个列表: 
    >>> member = ['', '', '', '', '']
    >>> member
    ['', '', '', '', '']
    >>> member[0]
    ''
    >>> member[1]
    ''
    >>> 
     如果元素“初二”想排在“初一”前面,该如何调换其位置呢?我们可以用一个中间值(临时的变量)如: 
    >>> temp = member[0]
    >>> member[0] = member[1]
    >>> member
    ['', '', '', '', '']
    >>> member[1] = temp
    >>> member
    ['', '', '', '', '']
    >>> 
     
    从列表中删除元素,有三个方法:
    remove() 
    >>> member
    ['', '', '', '', '']
    >>> member.remove('')
    >>> member
    ['', '', '', '']
    >>> 
     但如果删除一个列表里不存在的元素会如何? 
    >>> member.remove('')
    Traceback (most recent call last):
      File "<pyshell#13>", line 1, in <module>
        member.remove('')
    ValueError: list.remove(x): x not in list
    >>> 
     是的,会报错。
    del 语句 
    >>> member
    ['', '', '', '']
    >>> del member[1]
    >>> member
    ['', '', '']
    >>> 
     del也可以删除整个列表,如del member那么这个列表就从内存里删掉了。

    pop()
    pop是从列表中取出最后一个元素,并返回给你。如:
     
    >>> member.pop()
    ''
    >>> member
    ['', '']
    >>> 
     pop也可以作为一个变量的赋值如: 
    >>> member
    ['', '']
    >>> name = member.pop()
    >>> member
    ['']
    >>> 
     pop还可以加上一个参数,如列表的索引值: 
    >>> member = ['', '', '', '', '']
    >>> member
    ['', '', '', '', '']
    >>> member.pop(1)
    ''
    >>> member
    ['', '', '', '']
    >>> 
     
    列表分片(切片)(slice)
     利用索引值,每次我们可以从列表中获取一个元素,但如果一次性需要获取多个元素怎么办呢?利用列表切片,我们可以简单实现这个要求。如:(注意:原列表不受影响)
    >>> member
    ['', '', '', '']
    >>> member[1:3]                #切片用冒号分开,第一个数字表示起始位置,第二个数字表示结束位置
    ['', '']
    >>> 
     如何理解起始位置和结束位置?如下图
     >>> member
    ['''''''']
        0        1        2        3 

    列表的索引是从0开始的,切片结束位置并不包含该位置的元素,如果需要取‘初一’,‘初二’,‘初四’这三个元素(实际上是0,1,2),那么切片位置将设置为3 
     如果切片起始位置是列表的第一位即0,则可以简写,如
     
    >>> member[:3]            #起始位置为第一位
    ['', '', '']
    >>> member[1:]            #从起始位置起一直切到最后
    ['', '', '', '']
    >>> member[:]            #拷贝整个列表。
    ['', '', '', '', '']
    >>> 
     member[:]拷贝有大作用,如: 
    >>> member2 = member[:]
    >>> member2
    ['', '', '', '', '']
    >>> 


    测试题: 
     0. 下边的列表分片操作会打印什么内容?
    1. >>> list1 = [1, 3, 2, 9, 7, 8]
    2. >>> list1[2:5] 
    答:[2,9,7]
     
    1. 请问 list1[0] 和 list1[0:1] 一样吗?
     答:不一样。list1[0]是取一个值,list1[0:1]是取一个列表的分片。
    论坛参考答案:
    不一样,list1[0] 返回第0个元素的值,list1[0:1] 返回一个只含有第0个元素的列表
    2. 如果你每次想从列表的末尾取出一个元素,并将这个元素插入到列表的最前边,你会怎么做? 
    答: 
    list1 = [1, 3, 2, 9, 7, 8]
    num = list1.pop()
    list1.insert(0,num)
    print (list1)
     论坛参考答案: list1.insert(0, list1.pop())
    3. 有些鱼油比较调皮,他说我想试试 list1[-3:-1] 会不会报错,怎么知道一试居然显示 [9, 7],这是怎么回事呢?
    答:-3只是倒数而已。如list1,0的位置对应的是1,那么-1的位置对应8,-3位置对应9
    论坛参考答案:
    Python 的列表很聪明,竟然支持负数索引,如图:
      
    2.png 
      
    正常索引是从左到右索引,负数索引是从右到左。

    4.在进行分片的时候,我们知道分片的开始和结束位置需要进行指定,但其实还有另外一个隐藏的设置:步长。

    在普通的分片操作中,步长默认设置为1,表示逐个遍历元素。其实我们可以人为调整步长以达到不可告人的秘密。
    1. >>> list1[0:6:2]
    2. [1, 2, 7]
    复制代码
    那么依你推测,关于步长的知识点还有哪些(很多知识点都是通用的)? 
    答:理解,但不知。
    论坛参考答案:
    1) 之前提到的“简洁”分片操作在这里有效:
    1. >>> list1[::2]
    2. [1, 2, 7]
    复制代码

    2) 步长不能为0,要不就走不动了:
    1. >>> list1[::0]
    2. Traceback (most recent call last):
    3.   File "<pyshell#11>", line 1, in <module>
    4.     list1[::0]
    5. ValueError: slice step cannot be zero
    复制代码

    3) 步长可以是负数,改变方向(从尾部开始向左走):
    1. >>> list1[::-2]
    2. [8, 9, 3]
    复制代码
     
    5. 课堂上小甲鱼说可以利用分片完成列表的拷贝 list2 = list1[:],那事实上可不可以直接写成 list2 = list1 更加简洁呢? 
    答:可以。吧。。
     论坛参考答案:(比较长,有价值)
    千万不可以!
      
    好的,为了大家都可以弄明白这个【必须理解】的概念,我啰嗦一下:
      
    上节课我们提到使用分片创建列表的拷贝,例如:
    1. >>> list1 = [1, 3, 2, 9, 7, 8]
    2. >>> list2 = list1[:]
    3. >>> list2
    4. [1, 3, 2, 9, 7, 8]
    5. >>> list3 = list1
    6. >>> list3
    7. [1, 3, 2, 9, 7, 8]
    复制代码

    看上去貌似一样的,对吧?但事实上呢?我们利用列表的一个小伙伴做下修改,大家看一下差别:
    1. >>> list1.sort()
    2. >>> list1
    3. [1, 2, 3, 7, 8, 9]
    复制代码

    看到吧,我们的list1已经从小到大排了个序,那list2和list3呢?
    1. >>> list2
    2. [1, 3, 2, 9, 7, 8]
    复制代码

    可以看到我们使用分片的方式得到的list2很有原则、很有格调,并不会因为list1的改变而改变,这个原理我待会儿跟大家说,我们接着看下list3:
    1. >>> list3
    2. [1, 2, 3, 7, 8, 9]
    复制代码

    大家可以看到了,真正的汉奸、墙头草是list3,Ta跟着list1改变了,这是为什么呢?
      
    不知道大家还记不记得我们在讲解变量的时候说过,Python的变量就像一个标签,就一个名字而已,贴哪是哪,指哪打哪,呃,我还是给大家伙画个图好。
      
    1.PNG 
      
    这下大家应该明白了吧,在为一个固定的东西指定另一个名字的做法,只是向同一个东西增加一个新的标签而已。
  • 相关阅读:
    Samba网络配置
    嵌入式汇编程序
    GDB常用命令
    Everything搜索结果显示0 Object
    关于值类型和引用类型
    Main()

    利用python脚本自动下载ICML会议接受的文章
    如何从mac下的photos导出照片
    Erlang语言研究综述
  • 原文地址:https://www.cnblogs.com/fishdm/p/3573003.html
Copyright © 2011-2022 走看看