python基础教程_学习笔记1:序列-1
序列
数据结构:通过某种方式组织在一起的数据元素的集合,这些数据元素能够是数字或者字符,甚至能够是其它数据结构。
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的更多相关文章
- python基础教程_学习笔记14:标准库:一些最爱——re
标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...
- python基础教程_学习笔记12:充电时刻——模块
充电时刻--模块 python的标准安装包含一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 不论什 ...
- python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36201499 标准库:一些最爱 集合.堆和双端队 ...
- python基础教程_学习笔记10:异常
异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.假设异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止运行: >>> ...
- python基础教程_学习笔记9:抽象
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/30745465 抽象 懒惰即美德. 抽象和结构 抽 ...
- python基础教程_学习笔记11:魔法方法、属性和迭代器
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/31417309 魔法方法.属性和迭代器 在pyth ...
- python基础教程_学习笔记18:标准库:一些最爱——shelve
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36029981 标准库:一些最爱 shelve S ...
- python基础课程_学习笔记15:标准库:有些收藏夹——fileinput
标准库:有些收藏夹 fileinput 重要功能 性能 叙述性说明 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 ...
- python基础课程_学习笔记26:编程的乐趣
编程的乐趣 编程柔术 当你坐下来,打算如何组织计划要定时,具体程序,然而,无论什么经验.在实现时间的函数的,你会逐渐学会了原来的设计,实用的新知识.我们不应该忽视沿途汲取的教训,相反,它们用于其他设计 ...
随机推荐
- LVS--什么是LVS?
1.什么是LVS? 首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术.调度器具有很 ...
- Qt国际化(Q_DECLARE_TR_FUNCTIONS() 宏给非Qt类添加翻译支持,以前没见过QTextEncoder和QTextDecoder和QLibraryInfo::location()和QEvent::LanguageChange)
Internationalization with Qt 应用程序的国际化就是使得程序能在国际间可用而不仅仅是在本国可用的过程. Relevant Qt Classes andAPIs 以下的类支持Q ...
- GPSR协议移植
修改的文件有packet.h.cmu-trace.cc.priqueue.cc.ns-packet.tcl.Makefile 1.在 $HOME/ns-allinone-2.29/ns-2.29下新建 ...
- 基于visual Studio2013解决C语言竞赛题之0701排队输出
题目 解决代码及点评 #include <stdio.h> #include <stdlib.h> void swap(int *a,int *b) { *a = *a ...
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数
整个引擎代码在github上,地址为:https://github.com/sun2043430/RegularExpression_Engine.git nullable, firstpos, la ...
- How to Create a Java Concurrent Program
In this Document Goal Solution Overview Steps in writing Java Concurrent Program Template ...
- Java基础03 构造器与方法重载
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在方法与数据成员中,我们提到,Java中的对象在创建的时候会初始化(initial ...
- 动态Pivot(2)
原文 http://book.51cto.com/art/200710/58875.htm 存储过程sp_pivot的实现包含糟糕的编程习惯和安全隐患.就像我在本章的前面提到的,微软强烈建议不要在用 ...
- on、where、having的区别(转载)
on.where.having的区别 on.where.having这三个都可以加条件的子句中,on是最先执行,where次之,having最后.有时候如果这先后顺序不影响中间结果的话,那最终结果是相 ...
- Square:从今天開始抛弃Fragment吧!
原文链接 : Advocating Against Android Fragments 原文作者 : Pierre-Yves Ricau 译文出自 : 开发技术前线 www.devtf.cn 译者 : ...