zoukankan      html  css  js  c++  java
  • Python基础学习之序列(2)

      通用序列操作

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

      1. 索引

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

      如例:

    Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> greeting='Hello'
    >>> greeting[0]
    'H'
    >>> greeting[-1]
    'o'
    >>> greeting[1]
    'e'
    >>> greeting[4]
    'o'

      这就是索引。可以通过索引获取元素。所有序列都可以通过这种方式进行索引。使用负数索引时,Python会从右边,也就是从最后1个元素开始计数。最后1个元素的位置编号是-1。

      字符串字面值能够直接使用索引,而不需要一个变量引用它们。两种做法的效果是一样的:

    >>> 'Hello'[1]
    'e'
    >>> 'Hello'[0]
    'H'
    >>> 'Hello'[-1]
    'o'
    >>> 

       索引示例:  

    #根据给定的年月日以数字形式打印出日期
    months=[
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
    'July',
    'August',
    'September',
    'October',
    'November',
    'December'
    ]
    #以1-31的数字作为结尾的列表
    endings=['st','nd','rd']+17*['th']+['st','nd','rd']+7*['th']+['st']
    year=input('Year:')
    month=input('Month(1-12):')
    day=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:2017
    Month(1-12):5
    Day(1-31):23
    May 23rd . 2017

       2. 切片

      与使用索引来访问单个元素类似,可以使用切片操作来访问一定范围内的元素。切片通过冒号相隔的两个索引来实现:

      切片运算符s[i:j]表示从S中提取一个子序列,它所包含的元素索引k的范围是i<=k<j。i和j都必须是整数或长整数。如果忽略开始或结束的索引,python就会假定它们的默认值分别是序列的开始和结尾。

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

      代码示例:

    Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32
    Type "copyright", "credits" or "license()" for more information.
    >>> a=[0,1,2,3,4,5,6,7,8,9]
    >>> b=a[3:6]
    >>> b
    [3, 4, 5]
    >>> c=a[2:-3]
    >>> c
    [2, 3, 4, 5, 6]
    >>> d=a[0:1]
    >>> d
    [0]>>> e=a[-2:-1]
    >>> e
    [8]
    >>> 

      2.1  优雅的捷径

        已知序列:a=[0,1,2,3,4,5,6,7,8,9]

        假设需要访问最后3个元素,那么当然可以进行显式的操作: 

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

         还有个捷径:如何切片所得部分包括序列结尾的元素,那么,只需要置空最后一个索引即可:   

    >>> a[-3:]
    [7, 8, 9]

    >>>a[-1:]

    [9]
    >>> a[-2:]
    [8, 9]
    >>> a[7:]
    [7, 8, 9]
    >>> a[8:]
    [8, 9]
    >>> a[-8:]
    [2, 3, 4, 5, 6, 7, 8, 9]
    >>> a[2:]
    [2, 3, 4, 5, 6, 7, 8, 9]
    >>>

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

    >>> a[:3]
    [0, 1, 2]
    >>> a[:1]
    [0]
    >>> a[:2]
    [0, 1]
    >>> a[:-2]
    [0, 1, 2, 3, 4, 5, 6, 7]
    >>> a[:-1]
    [0, 1, 2, 3, 4, 5, 6, 7, 8]
    >>> 

       实际上,如果需要复制整个序列,可以将两个索引都置空:

    >>> a[:]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> 

     2.2  更大的步长

      可以为切片运算符指定一个可选的步进值,表示方法为s[i:j:stride],这会让切片跳过一些元素。然而,这种行为从某种程度上说更加有趣。如果提供步进值,i是起始索引,j是结束索引,那么生成的子序列就是元素s[i]、s[i+stride]、s[i+2*stride].........等,直至到达索引值j为止(j不包含在内)。步进值也可以为负数。如果省略起始索引i,当stride 为正数时它被置为序列的开始,而当stride为负数时则被置为序列的结尾。如果省略结束索引j,当stride为正数时它被置为序列的结尾,而当stride为负数时则被置为序列的开始。

      举例说明:

    >>> a=[0,1,2,3,4,5,6,7,8,9]
    >>> b=a[::2]
    >>> b
    [0, 2, 4, 6, 8]
    >>> c=a[::-2]
    >>> c
    [9, 7, 5, 3, 1]
    >>> d=a[0:5:2]
    >>> d
    [0, 2, 4]
    >>> e=a[5:0:-2]
    >>> e
    [5, 3, 1]
    >>> f=a[:5:1]
    >>> f
    [0, 1, 2, 3, 4]
    >>> g=a[:5:-1]
    >>> g
    [9, 8, 7, 6]
    >>> h=a[5::1]
    >>> h
    [5, 6, 7, 8, 9]
    >>> i=a[5::-1]
    >>> i
    [5, 4, 3, 2, 1, 0]
    >>> j=a[5:0:-1]
    >>> j
    [5, 4, 3, 2, 1]
    >>> 

      

      

  • 相关阅读:
    ADO.NET Entity Framework(5)esql (二)。
    google首页动态图片代码
    ms sql 聚合事例
    GridView 一些操作
    《狼与狗的故事》
    Asp.net日期字符串格式化显示方法
    解决网爬工具爬取页面信息出现乱码的问题
    esql的查询结果集 ObjectQuery
    去空空格 null sql
    不安装 oracle的客户,就可以使用pl/sql访问远程oracle 数据库的方法
  • 原文地址:https://www.cnblogs.com/me80/p/6890422.html
Copyright © 2011-2022 走看看