• Python基础教程 读书笔记(2)第二章 列表和元组


    2.1序列概览

    列表和元组的主要区别在于,列表可以修改,元组则不能。也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适。使用后者的理由通常是技术性的,它与Python内部的运作方式有关。这也是内建函数可能返回元组的原因。一般来说,在几乎所有的情况下列表都可以替代元组。

    编写一个列表:

    >>> edward=['Edward Gumby',42]

    构建如下的一个人员信息的列表也是可以的,这个列表就是你的数据库:

    >>> john=['John Simith',50]
    
    >>> database=[edward,john]
    
    >>> database
    
    [['Edward Gumby', 42], ['John Simith', 50]]

    2.2通用序列操作

    所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing)、分片(sliceing) ,加(adding )、乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格)。除此之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。

    2.2.1索引

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

    >>> greeting='Hello'

    >>> greeting[0]

    'H'

    字符串字面值(就此而言,其他序列字面量亦可)能够直接使用索引,而不需要一个变量引用他们。

    >>> 'Hello'[1]

    'e'

    如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。

    >>> fourth=raw_input('Year:')[3]

    Year: 2025

    >>> fourth

    '5'

    实例:

    #根据给定的年月日以数字形式打印出日期

    >>> months=[

    'January',

    'February',

    "March",

    'April',

    'May',

    'June',

    'July',

    'Augest',

    'September',

    'October',

    'November',

    'December'

    ]

    #以1一31的数字作为结尾的列表

    endings=['st','nd','rd']+17*['th']

    +['st','nd','rd']+7*['th']

    +['st']

    year=raw_input('Year:')

    month=raw_input('Month(1-12:')

    day=raw_input('Day(1-31):')

    month_number=int(month)

    day_number=int(day)

    #要将月份和天数减1,以获得正确的索引

    month_name=months[month_number-1]

    ordinal=day+endings[day_number-1]

    print month_name+''+ordinal+''+year

    Year: 2015

    Month(1-12:>? 5

    Day(1-31):>? 13

    May13th2015

    2.2.2分片

    与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。

    >>> tag='https://d396qusza40orc.cloudfront.net/statistics'

    >>> tag[23:37]

    'cloudfront.net'

    分片操作对于提取序列的一部分是很有用的。而编号在这里显得尤为重要。第1个索引是需要提取部分的第1个元素的编号,而最后的索引则是分片之后剩下部分的第1个元素的编号:

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

    >>> numbers[3:6]

    [4, 5, 6]

    简而言之,分片操作的实现需要提供两个索引作为边界,第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。

    1.优雅的捷径

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

    如果分片所得部分包括序列结尾的元素,那么,只需置空最后一个索引即可:

    >>> numbers[-3:]

    [7, 8, 9]

    这种方法同样适用于序列开始的元素:

    >>>numbers[:3]

    [1,2,3]

    2.3列表

    2.3.1list函数

    >>> list('hello')

    ['h', 'e', 'l', 'l', 'o']

    2.3.2基本的列表操作

    1.改变列表:元素赋值

    >>> x=[1,1,1]

    >>> x[1]=2

    >>> x

    [1, 2, 1]

    2.删除元素

    >>> names=['alice','beth','cecil','dee-dee','earl']

    >>> del names[2]

    >>> names

    ['alice', 'beth', 'dee-dee', 'earl']

    3.分片赋值

    >>> name=list('Perl')

    >>> name

    ['P', 'e', 'r', 'l']

    >>> name[2:]=list('ar')

    >>> name

    ['P', 'e', 'a', 'r']

    可以使用与原序列不等长的序列将分片替换:

    >>> name=list('Perl')

    >>> name[1:]=list('ython')

    >>> name

    ['P', 'y', 't', 'h', 'o', 'n']

    可以在不需要替换任何原有元素的情况下插入新的元素

    >>> numbers=[1,5]

    >>> numbers[1:1]=[2,3,4]

    >>> numbers

    [1, 2, 3, 4, 5]

    2.3列表方法

    1.append

    >>> lst=[1,2,3]

    >>> lst.append(4)

    >>> lst

    [1, 2, 3, 4]

    2.count

    >>> ['to','be','or','not','to','be'].count('to')

    2

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

    >>> x.count(1)

    2

    >>> x.count([1,2])

    1

    3.extend

    >>> a=[1,2,3]

    >>> b=[3,4,5]

    >>> a.extend(b)

    >>> a

    [1, 2, 3, 3, 4, 5]

    >>> a=a+b效果相同

    4.index

    >>> knights=['we','are','the','knights','who','say','ni']

    >>> knights.index('who')

    4

    >>> knights[4]

    'who'

    5.insect

    >>> numbers=[1,2,3,5,6,7]

    >>> numbers.insert(3,'four')

    >>> numbers

    [1, 2, 3, 'four', 5, 6, 7]

    6.pop

    移除列表中的一个元素,默认是最后一个

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

    >>> x.pop()

    3

    >>> x

    [1, 2]

    7.remove

    >>> x=['to','be','or','not','to','be']

    >>> x.remove('be')

    >>> x

    ['to', 'or', 'not', 'to', 'be']

    8.reverse

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

    >>> x.reverse()

    >>> x

    [3, 2, 1]

    9.sort

    >>> x=[4,5,3,1,7]

    >>> x.sort()

    >>> x

    [1, 3, 4, 5, 7]

    >>> x=[4,5,3,1,7]

    >>> y=x[:]

    >>> y.sort()

    >>> x

    [4, 5, 3, 1, 7]

    >>> y

    [1, 3, 4, 5, 7]

    >>> y=x.sort()

    >>> print y

    None

    应该是:

    >>> x=[4,5,3,1,7]

    >>> y=x[:]

    >>> y.sort()

    >>> x

    [4, 5, 3, 1, 7]

    >>> y

    [1, 3, 4, 5, 7]

    获取已排序的列表副本:

    >>> x=[4,5,3,1,7]

    >>> y=sorted(x)

    >>> x

    [4, 5, 3, 1, 7]

    >>> y

    [1, 3, 4, 5, 7]

    10.高级排序

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

    >>> cmp(40,33)

    1

    >>> cmp(33,40)

    -1

    >>> numbers=[5,2,9,7]

    >>> numbers.sort(cmp)

    >>> numbers

    [2, 5, 7, 9]

    2.4元组:不可变序列

    如果你用逗号分隔了一些值,那么你就自动创建了元组。

    >>> 1,2,3

    (1, 2, 3)

    >>> ()#空元组

    ()

    2.4.1tuple函数

    tuple函数的功能与list函数基本上是一样的:以一个序列作为参数并把它转换

    为元组。

    >>> tuple([1,2,3])

    (1, 2, 3)

    >>> tuple('abc')

    ('a', 'b', 'c')

    2.4.2基本元祖操作

    大致和序列类似

    2.4.3元组的意义

    元组可以在映射(和集合的成员)中当作键使用—而列表则不行元组作为很多内建函数和方法的返回值存在,也就是说你必须对元组进行处理。只要不尝试修改元组,那么,“处理”元组在绝大多数情况下就是把它们当作列表来进行操作(除非需要使用一些元组没有的方法,例如index和count一般来说,列表可能更能满足对序列的所有需求。

    2.5小结

    cmp(x, y)比较两个值

    len(seq)返回序列的长度

    list(seq)把序列转换成列表

    max(args)返回序列或者参数集合中的最大值

    min(args)返回序列或者参数集合中的最小值

    reversed(seq)对序列进行反向迭代

    sorted(seq)返回已排序的包含seq所有元素的列表

    tuple(seq)把序列转换成元组

  • 相关阅读:
    CentOS 6找不到partprobe命令的解决方法
    RTL源码归类与路径
    拓扑排序
    Char、AnsiChar、WideChar、PChar、PAnsiChar、PWideChar 的区别
    Delphi Byte与数据类型之间的转换
    Delphi byte[]转换为int
    Delphi Byte数组与Int String之间的相互转换
    delphi TTcpClient TTcpServer分析
    Delph7中TcpClient和TcpServer用法分析
    动态数组的使用
  • 原文地址:https://www.cnblogs.com/jpld/p/4502456.html
Copyright © 2020-2023  润新知