通用序列操作

  所有序列类型都可以进行某些特定的操作。这些操作包括:索引(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]
>>>

  

  

Python基础学习之序列(2)的更多相关文章

  1. Python基础学习之序列(1)

    序列 序列类型有着相同的访问模式:它的每一个元素可以通过指定一个偏移量的方式得到.而多个元素可以通过切片操作的方式一次得到,下标偏移量是从0开始到总元素-1结束,之所以要减1是因为我们是从0开始计数的 ...

  2. Day1 Python基础学习

    一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...

  3. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  4. Day1 Python基础学习——概述、基本数据类型、流程控制

    一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...

  5. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

  6. (一)python基础学习

    根据廖雪峰老师的python教程写一些学习总结! Python基础学习 1.使用list和tuple (1)list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时 ...

  7. python基础学习(起步)

    目录 python基础学习(起步) 变量 常量 变量的内存管理 python垃圾回收机制 变量的其他赋值方式 今日编程小题 本人能力有限,若有偏颇之处请读者大大不吝赐教! 祝大家每天都在成长! pyt ...

  8. Python基础学习二

    Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...

  9. Python基础学习一

    Python基础学习一 1.变量与常量 变量名:大小写英文.数字.下划线的组合,数字不能开头 常量名:习惯上常量用大写字母命名,例如"PI" 2.多行输出 转义符:反斜杠(),如果 ...

随机推荐

  1. CuteFTP文件列表按名称排序,有中文文件名时,软件死掉的解决办法

    看到很多人的解决办法是切换到一个没有中文的文件夹,点击排序后,再切换回来,这个的确是可以解决问题,但是有些繁琐! 直接一步到位的解决办法是: 依次点击菜单:工具->全局选项->导航-> ...

  2. 面试题 和 python 2与3的期区别

      1.3 python2与python3的一些区别 大环境下的区别:python2:1,源码都含有php,Java,C,等语言的规范陋习,2,重复代码特别多. python3:源码很规范,清晰,简单 ...

  3. POJ 2421 Constructing Roads(最小生成树)

    Description There are N villages, which are numbered from 1 to N, and you should build some roads su ...

  4. 关于Django在写小项目的一些小注意事项

    个人常踩的坑的小问题: . 在筛选元素的时候,及时queryset里面只有一个元素,取值还是要用方法取出来 例:#当狗指定pd时候已经唯一,还是要加fir()方法,本人经常忘记了 models.Boo ...

  5. java中所有开源注解收集

    @resource: resource全名为@Resource ,用来激活一个命名资源(namedresource)的依赖注入,在JavaEE应用程序中,该注解被典型地转换为绑定于JNDI conte ...

  6. Netcore中实现字段和属性注入

    https://www.cnblogs.com/loogn/p/10566510.html 简单来说,使用Ioc模式需要两个步骤,第一是把服务注册到容器中,第二是从容器中获取服务,我们一个一个讨论并演 ...

  7. php程序设计 1,2章节

    <?php/** * Created by PhpStorm. * User: DY040 * Date: 2017/9/4 * Time: 10:39 * * * 1: php起源于1995 ...

  8. Vue自定义指令实现按钮级权限控制功能

    思路: 登录:当用户填写完账号和密码后向服务端验证是否正确,验证通过之后,服务端会返回一个token,拿到token之后(我会将这个token存贮到sessionStorage中,保证刷新页面后能记住 ...

  9. Spring MVC自定义错误页面

    在web.xml中添加: <error-page(其他属性404...省略咯)> <location>/error</location> </error-pa ...

  10. oracle命令查看表结构及表索引

    --查看oracle数据库的单个表结构 select dbms_metadata.get_ddl('TABLE','TABLE_NAME') from dual; 括号里面有两个参数,第一个参数是我们 ...