zoukankan      html  css  js  c++  java
  • 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)把序列转换成元组

  • 相关阅读:
    mysql索引
    springboot mybatis 后台框架平台 shiro 权限 集成代码生成器
    java 企业网站源码模版 有前后台 springmvc SSM 生成静态化
    java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
    activiti工作流的web流程设计器整合视频教程 SSM和独立部署
    .Net Core中的ObjectPool
    文件操作、流相关类梳理
    .Net Core中的配置文件源码解析
    .Net Core中依赖注入服务使用总结
    消息中间件RabbitMQ(一)
  • 原文地址:https://www.cnblogs.com/jpld/p/4502456.html
Copyright © 2011-2022 走看看