• 查漏补缺(二)---列表与元组


    2.2.1 索引

    序列中的所有元素都是有编号的——从0开始递增。这些元素可以通过编号分别访问,如下例所示:

    >>>greeting='Hello'
    >>>greeting[0]
    'H'

    字符串字面值(就此而言,其他序列字面量亦可)能够直接使用索引

    >>>'Hello'[1]
    'e'

    2.2.2 分片

    编号在这里尤为重要:

    第1个索引是要提取的第1个元素的编号,而最后的索引则是分片之后剩余部分的第1个元素的编号:

    >>>numbers=[1,2,3,4,5,6,7,8,9,10]
    >>>numbers[3:6]
    [4,5,6]
    >>>numbers[0:1]
    [1]

    1.优雅的捷径

    假设需要访问最后3个元素(先前的例子),那么当然可以进行显示的操作:

    >>>numbers[7:10]
    [8,9,10]

    索引10指向的是第11个元素——这个元素并不存在,却是在最后一个元素之后。即为了让分片部分能够包含列表的最后一个元素,必须提供最后一个元素的下一个元素所对应的索引作为边界。

    >>>numbers[-3:-1]
    [8,9,10]
    >>>numbers[-3:]
    [8,9,10]

    2.更大的步长

    >>>numbers[0:10:2]
    [1,3,5,7,9]

    步长可以是复数,但不可以为0.

    2.2.3 序列相加

    两种相同类型的序列才能进行连接操作

    2.2.4 乘法

    用数字 x 乘以一个序列会生成新的序列,而在新的序列中,原来的序列将被重复 x 次:

    >>>'python'*5
    'pythonpythonpythonpythonpython'
    >>>[42]*10
    [42,42,42,42,42,42,42,42,42,42]

    2.3 列表:Python 的“苦力”

    2.3.1 list 函数

    因为字符串不能像列表一样被修改,所以有时候根据字符串创建列表会很有用。list可以实现这个功能:

    >>>list('Hello')
    ['H','e','l','l','o']

    PS:list函数适用于所有类型的序列,而不只是字符串

    2.3.2 基本的列表操作

    1.改变列表:元素赋值

    2.删除元素:从列表删除元素也很容易:使用del语句实现:

    >>>names=['Alice','Beth','Cecil','Dee-Dee','Earl']
    >>>del names[2]
    >>>names
    ['Alice','Beth','Dee-Dee','Earl']

    3.分片赋值

    2.3.3 列表方法

    1.append

    2.count

    count方法统计某个元素在列表中出现的次数:

    >>>['to','be','or','not','to','be'].count('to')
    2
    >>>x=[[1,2],1,1,[2,1,[1,2]]]
    x.count(1)
    2

    3.extend

    extend方法可以在列表的末尾一次性追加另一个序列中的多个值。换句话说,可以用新列表扩展原有的列表:

    >>>a=[1,2,3]
    >>>b=[4,5,6]
    >>>a.extend(b)
    >>>a
    [1,2,3,4,5,6]

    4.index

    index方法用于从列表中找出某个值第一个匹配项的索引位置:

    >>>knights=['we','are','knights','who','say','in']
    >>>knights.index('who')
    4

    5.insert

    >>>numbers=[1,2,3,5,6,7]
    >>>numbers.insert(3,'four')
    >>>numbers
    [1,2,3,'four',5,6,7]

    6.pop

    pop方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值:

    >>>x=[1,2,3]
    >>>x.pop()
    3
    >>>x
    [1,2]
    >>>x.pop(1)
    >>>x
    [2]

    pop方法是唯一一个既能修改列表又返回元素值(除了None)的列表方法

             使用pop方法可以实现一种常见的数据结构——栈。栈的原理就像堆放盘子那样。只能在顶部放一个盘子,同样,也只能从顶部拿走一个盘子。最后被放入堆栈的最先被移出

    (LIFO后进先出)‘

             对于上述两个栈操作(放入和移除),它们有大家都认可的称谓——入栈(push)和出栈(pop)。Python没有入栈方法,但可以使用append方法来代替。pop方法和append方法的操作结果恰好相反,如果入栈(或者追加)刚刚出栈的值,最后得到的结果还是原来的栈。

    >>>x=[1,2,3]
    >>>x.append(x.pop())
    >>>x
    [1,2,3]

    PS:实现先进先出(FIFO)的队列(queue),那么可以使用insert(0,..)来代替append方法。或者,继续使用append方法,但必须使用pop(0)来代替pop()。更好的解决方案是使用collection模块中的deque对象。

    7.remove :用于移除列表中某个值的第一个匹配项

    8.reverse:将列表中的元素反向存放

    PS:对一个序列进行反向迭代,那么可以使用reversed函数。这个函数返回的是一个迭代器(iterator)对象,使用list函数把返回的对象转换成列表

    >>>x=[1,2,3]
    >>>list(reversed(x))
    [3,2,1]

    9.sort

    前面介绍过几个改变列表却不返回值的方法,在大多数情况下这样的行为方式是很合常理的(例如append)。但是,当用户需要一个排好序的列表副本,同时又保留原有列表不变的时候,问题出现了:

    >>>x=[4,6,2,1,7,9]
    >>>y=x.sort() #don't do this
    >>>print y
    None

    sort方法修改了x却返回了空值,那么最后得到的是已排序的x以及值为None的y。实现这个功能的正确方法是,首先把x的副本赋值给y,然后对y进行排序:

    >>>x=[4,6,2,1,7,9]
    >>>y=x[:]
    >>>y.sort
    >>>x
    [4,6,2,1,7,9]
    >>>y
    [1,2,4,6,7,9]

    另一种获取已排序的列表副本的方法是,使用sorted函数:

    >>>x=[4,6,2,1,7,9]
    >>>y.sorted(x)
    >>>x
    [4,6,2,1,7,9]
    >>>y
    [1,2,4,6,7,9]

    sorted函数可以用于任何序列,却总是返回一个列表:

    >>>sorted('Python')
    ['h','n','o','P','t','y']

    10.高级排序

    compare(x,y)函数会在 x < y 时返回负数,在 x > y 时返回正数,如果 x = y 则返回0

    如果要根据元素的长度进行排序,那么可以使用len作为键函数:

    >>>x=['aardvark','abalone','acme','add','aerate']
    >>>x.sort(key=len)
    >>>x
    ['add','acme','aerate','abalone','aardvark'

    sort方法有另外的两个可选的参数——key和reverse。

    >>>x=[4,6,2,1,7,9]
    >>>x.sort(reverse=True)
    >>>x
    [9.7,1,2,6,4]

    2.4 元组

    >>>1,2,3
    (1,2,3)
    
    >>>(1,2,3)
    (1,2,3)
    
    >>>()
    ()
    
    >>>42,
    (42,)
    
    >>>3*(40+2,)
    (42,42,42)

     2.4.1 tuple函数

  • 相关阅读:
    [中文] 以太坊(Ethereum )白皮书
    走近比特币:一个故事看懂“区块链”
    MAC下redis的安装和配置
    mysql查询优化
    mac上用VMWare虚拟机装Linux-Ubuntu
    rest-framework框架
    浅谈设计模式
    [BZOJ3786]星系探索(欧拉序+非旋treap)
    [SDOI2017]遗忘的集合(多项式ln+生成函数+莫比乌斯反演)
    [LuoguP4841]城市规划(多项式ln+生成函数)
  • 原文地址:https://www.cnblogs.com/HelloDreams/p/4979134.html
Copyright © 2020-2023  润新知