《Python基础教程(第二版)》学习笔记 -> 第二章 列表和元组
本章将引入一个新的概念:数据结构。
数据结构是通过某种方式阻止在一起的数据元素的集合,这些数据元素可以是数字或者字符,设置可以是其他数据结构。
Python中,最基本的数据结构是序列(Sequence),序列中的每个元素被分配一个序列号--即元素的位置,也称为索引。第一个索引是0,第二个则是1,以此类推,倒数第一个是-1。
序列概览
Python中包含6中内建的序列:列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。本章节重点内容是:列表和元组。
列表和元组的主要区别在于:列表可以修改, 元组则不能。
下面开始举例:
>>> example = [','b',3] >>> example2 = ['test'] >>> test = [example,example2] >>> test [[', 'b', 3], ['test']]
上例是对列表进行赋值操作,列表是用[]来括起来的
通用序列操作
常用的操作包括:索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员。除此之外,Python还有计算序列长度,找出最大元素和最小元素的内建函数。
- 索引
序列中的所有元素都是有编号的(从0开始递增,0指向第一个元素),示例如下:>>> test = 'hello' >>> test[0] 'h'
下面再例举一个代码实例:
#define months months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ] #define day's endings 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) month_name = months[month_number - 1] day_name = day + endings[day_number - 1] print month_name +' '+ day_name + ',' + year
输出结果:
Year:2013 Month(1-12):12 Day(1-31):26 Dec 26th,2013
- 分片
先示例:>>> a = [,,,,,,,,,] >>> a[:] [, , , ]
结合上例,根据上节索引内容可知,分片操作的实现需要提供至少两个索引作为边界,第一个索引的元素是包含在元素分片内的,而第二个则不包含在分片内。
下面再例举几个实例:
>>> a[-3:-1] [8, 9] >>> a[-3:] [8, 9, 10] >>> a[:] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
更大的步长
>>> a = [1,2,3,4,5,6,7,8,9,10] >>> a[1:9:2] [2, 4, 6, 8] >>> a[::2] [1, 3, 5, 7, 9] >>> a[::-2] [10, 8, 6, 4, 2]
进行分片的时候,分片的开始和结束点需要进行指定,而另一个参数 - 步长(step length),通常都是隐式设置的。在普通的分片中,默认步长是1,分片操作就是按照这个步长逐步遍历序列的元素,然后返回开始喝结束点之间的所有元素。
如果步长是负数,那么就会从右往左提取元素。
- 序列相加
只有两种相同类型的序列才能进行连接操作>>> a = [1,2] >>> b = [3,4] >>> a + b [1, 2, 3, 4]
- 乘法
用数字x诚意一个序列会生成新的序列,而在新的序列中,原来的序列会被重复x次,示例如下:>>> 'Python'*5 'PythonPythonPythonPythonPython' >>> [5]*5 [5, 5, 5, 5, 5]
下面举一个复杂一点的乘法示例:用程序在屏幕上打印一个由字符组成的“盒子”,而这个“盒子”在屏幕上居中,而且能根据用户输入的句子自动调整大小:
sentence = raw_input('please input the sentence:') screen_width = 80 text_width = len(sentence) box_width = text_width +6 left_margin = (screen_width - box_width)//2 print print ' '*left_margin + '+' + '-'*(box_width-2) + '+' print ' '*left_margin + '|' + ' '*(box_width-2) + '|' print ' '*left_margin + '|' + sentence + ' '*(box_width-2-text_width) + '|' print ' '*left_margin + '|' + ' '*(box_width-2) + '|' print ' '*left_margin + '+' + '-'*(box_width-2) + '+' print
输出结果如下:
please input the sentence:Python +----------+ | | |Python | | | +----------+
None、空列表和初始化
空列表可以简单地通过两个中括号进行表示([])。
None是一个Python的内建值,它的确切含义是“这里什么也没有”,因此,如果想初始化一个长度为10的列表,可以按照下面的例子:>>> sequence = [None]*10 >>> sequence [None, None, None, None, None, None, None, None, None, None]
注意None的首字母大写
- 成员资格
为了检查一个值是否在序列中,可以使用 in 运算符。示例如下:>>> p = [2,3] >>> 2 in p True >>> x = 'Python' >>> 'm' in x False
- 长度、最小值 和 最大值
内建函数len(长度),min(最小值)和max(最大值)。
示例如下:>>> python = [1,2,3,4,5] >>> len(python) 5 >>> max(python) 5 >>> min(python) 1
列表
上面的例子已经用了很多次列表,下面将会讨论列表不同于元素和字符串的地方:列表时可变的(mutable)——可以改变列表的内容,并且列表有很多有用的、专门的方法。
- list函数
因为字符串不能像列表那样被修改,所以有时根据字符串创建列表会很有用,而list函数可以实现这个操作:>>> list('Python') ['P', 'y', 't', 'h', 'o', 'n']
list函数适用于所有类型的序列,而不只是字符串
- 基本的列表操作
①改变列表:元素赋值>>> a = [,,] >>> a[] = >>> a [, , ]
②删除元素
>>> test = ['a','b','c','d'] >>> del test[2] >>> test ['a', 'b', 'd']
③分片赋值
先示例:>>> name = list('python') >>> name[1:] = 'wm' >>> name ['p', 'w', 'm'] >>> names = list('english') >>> names[1:3] = 'tt' >>> names ['e', 't', 't', 'l', 'i', 's', 'h']
分片赋值语句可以在不需要替换任何原有元素的情况下插入新的元素:
>>> a = ['] >>> a[1:1] = 'test' >>> a [']
- 列表方法
方法是一个与某些对象有紧密联系的函数,对象可能是列表、数字。也可能是字符串或者其他类型的对象。一般来说,方法可以这样进行调用:
对象.方法(参数)① append
append方法用于在列表末尾追加新的对象:>>> a = [1,2,3] >>> a.append(4) >>> a [1, 2, 3, 4]
② count
count方法统计某个元素在列表出现的次数>>> test = [1,'a','a',[1,2],[1,[1,2]]] >>> test.count(1) 1 >>> test.count('a') 2 >>> test.count([1,2]) 1
③ extend
extend方法可以在列表的末尾一次性追加另一个序列中的多个值。换句话说,可以用新列表扩展原有的列表:>>> a = [1,2,3] >>> b = [4,5,6] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6]
和连接操作,赋值操作对比
>>> a = [1,2,3] >>> b = [4,5,6] >>> a+b [1, 2, 3, 4, 5, 6] >>> a [1, 2, 3] >>> a = a + b #赋值操作 >>> a [1, 2, 3, 4, 5, 6]
④ index
index方法用于从列表中找出某个值第一个匹配项的索引位置:>>> a = ['a','b','c','d'] >>> a.index('c') 2
当索引中寻找的匹配项找不到,系统就会报错
⑤ insert
insert方法用于将对象插入到列表中:>>> a = [1,2,3,4,5] >>> a.insert(3,'Python') >>> a [1, 2, 3, 'Python', 4, 5]
⑥ pop
pop方法会移除列表中的一个元素(默认是最后一个),并返回该元素的值:>>> a = [1,2,3] >>> a.pop() 3 >>> a [1, 2]
⑦ remove
remove方法用于移除列表中某个值的第一个匹配项
>>> a = [1,2,3,1] >>> a.remove(1) >>> a [2, 3, 1]
⑧ reverse
reverse方法将列表中的元素方向存放>>> a = ['a','b','c'] >>> a.reverse() >>> a ['c', 'b', 'a']
⑨ sort
sort方法用于在原位置对列表进行排序。在“原位置排序”意味着改变原来的列表,从而让其中的元素能按一定的顺序排列,而不是简单地返回一个已排序的列表副本。>>> x = [1,6,4,3,9,2] >>> x.sort() >>> x [1, 2, 3, 4, 6, 9]
4. 元组
元组与列表一样,也是一种序列。唯一的不同是元组不能修改。创建元组的语法很简单:
>>> 1,2,3 (1, 2, 3) >>> (2,3,4) (2, 3, 4) >>> () ()
①tuple函数
tuple函数的功能与list函数基本是一样的:以一个序列作为参数并把它转换为元组。如果参数是元组,那么该参数就会被原样返回:
>>> tuple([1,2,3]) (1, 2, 3) >>> tuple('abc') ('a', 'b', 'c') >>> tuple((1,2)) (1, 2)
②基本元组操作和序列类似
③元组的意义
- 元组可以在映射中当做键来使用,而列表不行
- 元组作为很多内建函数和方法的返回值存在,也就是说你必须对元组进行处理。
小结
- 序列:序列是一种数据结构,它包含的元素都进行了编号(从0开始)。典型的序列包括:列表、字符串和元组。
- 成员资格:in操作符
- 方法:现在主要是一些内建的函数
(加快自己的节奏,最近又贪玩了,呵呵下自己)
《Python基础教程(第二版)》学习笔记 -> 第二章 列表和元组的更多相关文章
- <<Python基础教程>>学习笔记 | 第04章 | 字典
第04章:字典 当索引不好用时 Python唯一的内建的映射类型,无序,但都存储在一个特定的键中.键能够使字符.数字.或者是元祖. ------ 字典使用: 表征游戏棋盘的状态,每一个键都是由坐标值组 ...
- <<Python基础教程>>学习笔记 | 第10章 | 充电时刻
第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...
- <<Python基础教程>>学习笔记 | 第12章 | 图形用户界面
Python支持的工具包非常多.但没有一个被觉得标准的工具包.用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: http://wxpython.org/ ------ ...
- <<Python基础教程>>学习笔记 | 第11章 | 文件和素材
打开文件 open(name[mode[,buffing]) name: 是强制选项,模式和缓冲是可选的 #假设文件不在.会报以下错误: >>> f = open(r'D:\text ...
- python cookbook第三版学习笔记三:列表以及字符串
过滤序列元素: 有一个序列,想从其中过滤出想要的元素.最常用的办法就是列表过滤:比如下面的形式:这个表达式的意义是从1000个随机数中选出大于400的数据 test=[] for i in range ...
- Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver
1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...
- Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥
1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...
- python学习笔记之一:列表与元组
最近在看<python基础教程>(基于python2.x),下面总结一下第二章列表与元组的知识: 在这章中引入了数据结构的概念.数据结构是通过某种方式组织在一起的数据元素的集合.在pyth ...
- 锋利的jquery第二版学习笔记
jquery系统学习笔记 一.初识:jquery的优势:1.轻量级(压缩后不到30KB)2.强大的选择器(支持css1.css2选择器的全部 css3的大部分 以及一些独创的 加入插件的话还可支持XP ...
- python cookbook第三版学习笔记十:类和对象(一)
类和对象: 我们经常会对打印一个对象来得到对象的某些信息. class pair: def __init__(self,x,y): self.x=x self. ...
随机推荐
- JVM -XX: 参数介绍(转)
垃圾回收器相关常用参数: 功能开关: 参数 默认值或限制 说明 参数 默认值 功能 -XX:-AllowUserSignalHandlers 限于Linux和Solaris,默认不启用 允许为java ...
- 原创新闻 11 个最佳 jQuery 滚动条插件
通过jQuery滚动条插件,你可以换掉千篇一律的默认浏览器滚动条,让你的网站或web项目更具特色,更有吸引力.本文收集了11款非常漂亮.实用的jQuery滚动条插件,你可以轻松将它们应用在自己的网站中 ...
- 团体程序设计天梯赛-练习集L2-002. 链表去重
L2-002. 链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个带整数键值的单链表L,本题要求你编写程序,删除 ...
- POJ-1088 滑雪 (包含部分自用测试数据)
这题最简单的想法是深搜+记录,由于数据量比较小.这么做可以AC.如果在h大的情况下这种递归方法总会有一些问题. 如果转换一下,这个可以使用递推来解决,先对高度进行由低到高的排序,然后顺序对这些高度计算 ...
- mac 升级后 web 服务器起不来 问题
4. Apache 要本地调试代码的时候发现Apache也不能幸免地跪了.执行apachectl -v发现Apache已经更新到2.4.9版本了.一定又是因为版本更新出了什么差错. 4.1 修改htt ...
- PHP开发工具介绍之zendStudio
1.PHP开发工具介绍之zendStudio 下载:进入官网:http://www.zend.com/en/products/studio 选择下载安装 注意这里的工作空间要和你Apache的工作目录 ...
- Android安全问题 抢先拦截短信
同上篇文章一样,这里只陈述结果,代码分析稍后给出 导读:本文叙述如何先于某些伪杀毒软件.病毒.常规软件获取到短信 众所周知,android系统在收到短信息的时候会发送广播,但是此广播是有序广播,也就是 ...
- SQL数据库还原时备份集中的数据库备份与现有的数据库不同的解决办法
SQL Server 2005数据库还原出错错误具体信息为:备份集中的数据库备份与现有的A数据库不同 具体操作如下:第一次:新建了数据库A,数据库文件放在E:\DB\A目录下,选中该数据库右键-任务- ...
- C中如何调用C++函数、类内函数 \混编\链接
在C中如何调用C++函数的问题,简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂 ...
- Android 自定义Button按钮显示样式(正常、按下、获取焦点)
现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天学习自定义Button按钮样式.Button样式修改的是Button的背景 ...