序列

数据结构:通过某种方式组织在一起的数据元素的集合,这些数据元素能够是数字或者字符,甚至能够是其它数据结构。

python中,最主要的数据结构是序列。

序列中的每一个元素被分配一个序号——即元素的位置,也称为索引。第一个索引是0,第二个是1,以此类推。

序列概览

python包括6种内建的序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。

列表和元组的主要差别在于,列表能够改动,元组不能。

使用后者的理由一般是技术性的,它与python内部的运作方式有关。这也是内建函数可能返回元组的原因。

一般来说,在差点儿全部的情况下,列表都能够取代元组。当中一种须要注意到例外情况:使用元组作为字典的键。在这样的情况下,由于键不可改动,所以不能使用列表。

通用序列操作

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

注:另外一个重要的操作:迭代,兴许会接触到。

索引

序列中的全部元素都是编号的——从0開始递增。这些元素能够通过编号分别訪问。使用负数索引时,python会从右边,也就是最后一个元素開始计数。最后1个元素的位置编号是-1(记住:不是0)

字符串

>>> greeting = 'hello'

>>> greeting[0]

'h'

>>> greeting[-1]

'o'

>>> greeting[1]

'e'

>>> greeting[-2]

'l'

字符串字面值也能够使用索引。

>>> 'hello'[-1]

'o'

>>> 'hello'[-2]

'l'

列表

>>>greeting=['hello','world','you','and','i']

>>> greeting[0]

'hello'

>>> greeting[-1]

'i'

元组

>>>greeting=('hello','world','you','i')

>>> greeting[0]

'hello'

>>> greeting[-2]

'you'

假设一个函数调用返回一个序列,能够直接对返回结果进行索引操作。

>>>forth_num=raw_input("Please input a num(lenght>4): ")[3]

Please input a num(lenght>4): 20140508

>>> forth_num

'4'

分片

使用分片操作能够訪问一定范围内的元素,通过冒号相隔的两个索引来实现。

字符串

>>> greeting = 'Hello,world!'

>>> greeting[0:3]

'Hel'

列表

>>> greeting=['hello','world','you','and','i']

>>> greeting[1:3]

['world', 'you']

元组

>>>greeting=('hello','world','you','i')

>>> greeting[0:3]

('hello', 'world', 'you')

可知,分片中第一个索引是须要提取部分的第一个元素的编号,第二个索引是分片之后剩下部分的第1个元素的编号。简言之,分片操作的实现须要提供两个索引作为边界,第一个索引是包括在分片内的,第2个则不包括在分片内。

优雅的捷径

假设须要訪问序列的最后几个元素呢?当然能够显式的操作:

>>> greeting=['hello','world','you','and','i']

>>> greeting[1:5]

['world', 'you', 'and', 'i']

索引5指向的元素并不存在,这样的方法当然是可行的。但假设须要从列表的结尾開始计数呢?

>>> greeting[-4:-1]

['world', 'you', 'and']

>>> greeting[-4:0]

[]

这并非我们想要的结果。

实际上,仅仅要分片最左边的索引比右边的晚出如今序列中,结果就是一个空序列。能够使用捷径:假设分片所得部分包括序列结尾的元素,置空最后一个索引就可以:

>>> greeting[-4:]

['world', 'you', 'and', 'i']

相同能够用于序列開始的元素:

>>> greeting[:3]

['hello', 'world', 'you']

同理,想要复制整个序列,能够将两个索引置空(冒号不能省略):

>>> greeting[:]

['hello', 'world', 'you', 'and', 'i']

更大的步长

进行分片,分片的開始和结束点须要进行指定,另外一个參数——步长——一般是隐式设置的。在普通的分片中,步长是1——分片操作就是依照这个步长逐个遍历序列的元素,然后返回開始和结束点之间的全部元素。

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

>>> numbers[0:10:2]

[1, 3, 5, 7, 9]

捷径在这里依旧适用。将每4个元素中的第一个提取出来:

>>> numbers[::4]

[1, 5, 9]

步长不能为0,由于无法向下进行:

>>> numbers[::0]

Traceback (most recent call last):

File "<pyshell#49>", line 1, in <module>

numbers[::0]

ValueError: slice step cannot be zero

步长能够是负数,即从右到左提取元素:

>>> numbers[8:3:-1]

[9, 8, 7, 6, 5]

>>> numbers[::-2]

[10, 8, 6, 4, 2]

>>> numbers[:5:-2]

[10, 8]

>>> numbers[5::-2]

[6, 4, 2]

>>> numbers[3:8:-1]

[]

记住:分片最左边的索引比右边的晚出如今序列中,结果就是一个空序列。

当使用一个负数作为步长时,必须让開始点大于结束点。在没有明白指定開始点和结束点的时候,正负数的使用可能会带来一些混淆。

总之,对于一个正数步长,python会从序列的头部開始向右提前元素,直至最后一个元素;

对于负数步长,从序列的尾部開始向左提取元素,直到第一个元素。

python基础教程_学习笔记1:序列-1的更多相关文章

  1. python基础教程_学习笔记14:标准库:一些最爱——re

    标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...

  2. python基础教程_学习笔记12:充电时刻——模块

    充电时刻--模块 python的标准安装包含一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 不论什 ...

  3. python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36201499 标准库:一些最爱 集合.堆和双端队 ...

  4. python基础教程_学习笔记10:异常

    异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.假设异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止运行: >>> ...

  5. python基础教程_学习笔记9:抽象

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/30745465 抽象 懒惰即美德. 抽象和结构 抽 ...

  6. python基础教程_学习笔记11:魔法方法、属性和迭代器

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/31417309 魔法方法.属性和迭代器 在pyth ...

  7. python基础教程_学习笔记18:标准库:一些最爱——shelve

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36029981 标准库:一些最爱 shelve S ...

  8. python基础课程_学习笔记15:标准库:有些收藏夹——fileinput

    标准库:有些收藏夹 fileinput 重要功能 性能 叙述性说明 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 ...

  9. python基础课程_学习笔记26:编程的乐趣

    编程的乐趣 编程柔术 当你坐下来,打算如何组织计划要定时,具体程序,然而,无论什么经验.在实现时间的函数的,你会逐渐学会了原来的设计,实用的新知识.我们不应该忽视沿途汲取的教训,相反,它们用于其他设计 ...

随机推荐

  1. 获取sdcard和内存的存储空间

    package com.example.sdcardspace; import java.io.File; import android.os.Bundle; import android.os.En ...

  2. 变相的取消Datagridview控件的选中状态

    思路:把每一列的文字颜色设为黑色,选中时候的背景为白色,颜色为黑色.每一列都这样设置,那么变相的达到了取消选中效果. 图:

  3. linux学习过程中所需要看的一些书籍

    入门类 一直认为,在一个系统上学习开发之前,首先需要熟悉这个系统的使用.鉴于天朝的国情,绝大部分人第一个接触的操作系统就是Windows,因此对于这绝大部分人来说,如果要学习Linux开发,学会使用这 ...

  4. 初始WebApi 利用WebApi实现基础的CRUD

    微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService.它是简单,代码 ...

  5. JMS开源比较

    Java开源JMS消息中间件 mom4j mom4j是一个完全实现JMS1.1规范的消息中间件并且向下兼容JMS1.0与1.02.它提供了自己的消息处理存储使它独立于关系数据与语言,所以它的客户端可以 ...

  6. c语言数组初始化问题

    2147483648字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'}; 即把10 ...

  7. 海量数据存储之Key-Value存储简介

    Key-value存储简介 具备高可靠性及可扩展性的海量数据存储对互联网公司来说是一个巨大的挑战,传统的数据库往往很难满足该需求,并且很多时候对于特定的系统绝大部分的检索都是基于主键的的查询,在这种情 ...

  8. BZOJ 2750: [HAOI2012]Road( 最短路 )

    对于每个点都跑最短路, 然后我们得到了个DAG, 在这DAG上更新每条边的答案. 考虑e(u, v)∈DAG对答案的贡献:  假设从S到u得路径数为A[u], 从v出发到达任意点的路径数为B[v], ...

  9. javascript每日一练(五)——BOM

    一.BOM打开,关闭窗口 window.open(); window.close(); <!doctype html> <html> <head> <meta ...

  10. javascript笔记整理(流程控制)

    流程:就是程序代码的执行顺序 流程控制:通过规定的语句让程序代码有条件的按照一定的方式执行 1.顺序结构(按照书写顺序来执行,是程序中最基本的流程结构) 2.选择结构(分支结构.条件结构):根据给定的 ...