python基础教程(三)
序列概览
Python 包含6 种内建的序列,这里重点讨论最常用的两种类型:列表和元组。
列表与元组的主要区别在于,列表可以修改,元组则不能。也就是说如果要根据要求来添加元素,那么列表可以会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适。
在操作一组数值的时候,序列很好用。可以用序列表示数据库中一个人的信息---第一1是姓名,第2个元素是年龄。根据上述内容编写一个列表。
- >>> hu=['huhu',25]
同时,序列也可以包含其他的序列,因此,构建如下一个人员的信息的列表也是可的,这个列表就是你的数据库:
- >>> huhu = ['huhu',25]
- >>> chongshi = ['chongshi',32]
- >>> database = [huhu,chongshi]
- >>> database
- [['huhu', 25], ['chongshi', 32]]
通用序列操作
所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格)。
索引
序列中的所有元素都是有编号的-----从0 开始递增。这些元素可以通过编号分别访问,如下所示:
- >>> greeting = 'chongshi'
- >>> greeting[0]
- 'c'
- >>> greeting[2]
- 'o'
使用负数索引时,python 会从右边,也就是从最后1个元素开始计数。最后1个元素的位置编号是-1 (不是-0, 因为那会和第1个元素重合):
- >>> greeting = 'chongshi'
- >>> greeting[-1]
- 'i'
- >>> greeting[-2]
- 'h'
当然,我们也可以通过另一种方式使用所引,两种方式的效果是一样的:
- >>> 'chongshi'[0]
- 'c'
- >>> 'chongshi'[-1]
- 'i'
如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。例如,假设只对用户输入年份的第4个数字感兴趣,那么,可以进行如下操作:
- >>> fourth = raw_input('year:')[3]
- year:2013
- >>> fourth
- '3'
提示:请试着敲击代码,更能助帮你理解。不要懒得动手。
索引示例:

- #根据给定的年月日以数字形式打印出日期
- 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 =raw_input('year:')
- month =raw_input('month(1-12):')
- day =raw_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:2013
- month(1-12):4
- day(1-31)14
- 输出:
- April ,14th ,2013

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

- >>> tag = '<a href="http://www.python.org">Python web site</a>'
- >>> tag[9:30] # 取第9个到第30个之间的字符
- 'http://www.python.org'
- >>> tag[32:-4] #取第32到第-4(倒着数第4个字符)
- 'Python web site'
- >>>

如果求10个数最后三个数:

- >>> numbers = [0,1,2,3,4,5,6,7,8,9]
- >>> numbers[7:-1] # 从第7个数到 倒数第一个数
- [7, 8] #显然这样不可行
- >>> numbers[7:10] #从第7个数到第10个数
- [7, 8, 9] #这样可行,索引10指向的是第11个元素。
- >>> numbers[7:] # 可以置空最后一个索引解决
- [7, 8, 9]
- >>> numbers[:3]
- [0, 1, 2]
- >>> numbers[:]
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

分片示例:

- # 对http://fnng.cnblogs.com形式的URL进行分割
- url = raw_input('Please enter the URL:')
- domain = url[11:-4]
- print "Domain name:" + domain
- ------------------------------------------
输入:- >>>
- Please enter the URL:http://fnng.cngblogs.com
- 输出:
- Domain name:.cngblogs

更大步长:

- >>> numbers = [0,1,2,3,4,5,6,7,8,9]
- >>> numbers[0:10:1] #求0到10之间的数,步长为1
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- >>> numbers[0:10:2] #步长为2
- [0, 2, 4, 6, 8]
- >>> numbers[0:10:3] #步长为3
- [0, 3, 6, 9]

序列相加
通过使用加号可以进行序列的连接操作:

- >>> 'hello.'+'world!'
- 'hello.world!'
- >>> [1,2,3] + 'world!'
- Traceback (most recent call last):
- File "<pyshell#20>", line 1, in <module>
- [1,2,3] + 'world!'
- TypeError: can only concatenate list (not "str") to list

正如错误提示,列表和字符串是无法连接接在一起的,尽管它他们都是序列。简单来说,两种相同类型的序列才能进行连接操作。
乘法
- >>> 'python ' * 5
- 'python python python python python '
- >>> [25] * 10
- [25, 25, 25, 25, 25, 25, 25, 25, 25, 25]
如果想创建一个占用十个元素空间,却不包括任何有用的内容的列表,可以用Nome
- >>> sequence = [None] * 10
- >>> sequence
- [None, None, None, None, None, None, None, None, None, None]
序列(字符串)乘法示例:

- # 以正确的宽度在居中的“盒子”内打印一个句子
- # 注意,整数除法运算符(//)只能用在python 2.2 以及后续版本,在之前的版本中,只能用普通除法(/)
- sentence = raw_input("Sentence : ")
- screen_width = 80
- text_width = len(sentence)
- box_width = text_width + 6
- left_margin = (screen_width - box_width) //2
- print ' ' * left_margin + '+' + '-' * (box_width - 2)+ '+'
- print ' ' * left_margin + '| ' + ' ' * text_width + ' |'
- print ' ' * left_margin + '| ' + sentence + ' |'
- print ' ' * left_margin + '| ' + ' ' * text_width + ' |'
- print ' ' * left_margin + '+' + '-' * (box_width - 2)+ '+'
---------------------------------------------------------
输入:- >>>
- Sentence : haha! this is my box
- 输出:
- +------------------------+
- | |
- | haha! this is my box |
- | |
- +------------------------+

成员资格
为了检查一个值是否在序列中,可以使用in 运算符。该运算符和之前已经讨论过的(例如 + , * 运算符)有一点不同。这个运算符检查某个条件为真或假的(True or False )。
in运算符的例子:

- >>> permissions = 'rw'
- >>> 'w' in permissions
- True
- >>> 'y' in permissions
- False
- >>> users = ['zhangsan', 'lisi','wangwu']
- >>> raw_input('Enter your user name: ') in users
- Enter your user name: lisi
- True
- >>> subject ='$$$ Get rich now!!! $$$'
- >>> '$$$' in subject
- True

长度、最小值和最大值
内建函数len、min 和max 非常有用。Len函数返回序列中所包含元素的数量。Min函数和max函数则分别返回序列中最大和最小的元素。

- >>> numbers = [100,34,678]
- >>> len (numbers)
- 3
- >>> max(numbers)
- 678
- >>> min(numbers)
- 34
- >>> max(2,3)
- 3
- >>> min(9,3,2,5)
- 2

python基础教程(三)的更多相关文章
- 改写《python基础教程》中的一个例子
一.前言 初学python,看<python基础教程>,第20章实现了将文本转化成html的功能.由于本人之前有DIY一个markdown转html的算法,所以对这个例子有兴趣.可仔细一看 ...
- .Net程序员之Python基础教程学习----列表和元组 [First Day]
一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...
- python基础教程1:入门基础知识
写在系列前,一点感悟 没有梳理总结的知识毫无价值,只有系统地认真梳理了才能形成自己的知识框架,否则总是陷入断片儿似的学习-遗忘循环中. 学习方法真的比刻苦"傻学"重要多了,而最重要 ...
- 《python基础教程(第二版)》学习笔记 列表/元组(第2章)
<python基础教程(第二版)>学习笔记 列表/元组(第2章)序列中的下标从0开始x='ABC' ==> x[0]='A', x[1]='B', x[2]='C'负数索引从右边开始 ...
- Python基础教程总结(一)
引言: 一直都听说Python很强大,以前只是浏览了一些博客,发现有点像数学建模时使用的Matlab,就没有深入去了解了.如今Python使用的地方越来越多,最近又在学习机器学习方面的知识,因此想系统 ...
- Python基础教程(第2版 修订版) pdf
Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识11.1安装Python11.1.1Windows11.1.2Linux和UNIX31.1.3苹果机(Macintosh)41. ...
- python基础教程项目五之虚拟茶话会
python基础教程项目五之虚拟茶话会 几乎在学习.使用任何一种编程语言的时候,关于socket的练习从来都不会少,尤其是会写一些局域网的通信的东西.所以书上的这个项目刚好可以练习一下socket编程 ...
- Python基础 第三章 使用字符串(3)字符串方法&本章小结
字符串的方法非常之多,重点学习一些最有用的,完整的字符串方法参见<Python基础教程(第三版)>附录B. 模块string,虽然风头已小,但其包含了一些字符串方法中没有的常量和函数,故将 ...
- (Python基础教程之十二)Python读写CSV文件
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...
- Python基础教程(第3版)PDF高清完整版免费下载|百度云盘
百度云盘:Python基础教程(第3版)PDF高清完整版免费下载 提取码:gkiy 内容简介 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基 ...
随机推荐
- ES6对象扩展
前面的话 随着JS应用复杂度的不断增加,开发者在程序中使用对象的数量也在持续增长,因此对象使用效率的提升就变得至关重要.ES6通过多种方式来加强对象的使用,通过简单的语法扩展,提供更多操作对象及与对象 ...
- form表单提交图片禁止跳转
问题: 最近在做项目时,遇到上传图片需求,且在不跳转的情况下获取到返回信息 思路: 1. 使用ajax发送异步请求,经多次测试,最终以失败告终 2. iframe 禁止跳转(未尝试) 3. 修改fo ...
- jsp 重定向技术
页面重定向之后,request对象的属性全部失效,生成一个新的requeset对象
- JSP制作简单登陆
JSP制作简单登陆界面 运行环境 eclipse+tomcat+MySQL 不知道的可以参考Jsp运行环境--Tomcat 项目列表 这里我先把jsp文件先放在Web-INF外面访问 需要建立的几个文 ...
- TypeScript02 方法特性【参数种类、参数个数】、generate方法、析构表达式、箭头表达式、循环
1 方法的参数 1.1 必选参数 调用方法时实参的个数必须和定义方法时形参在数量和类型上匹配 /** * Created by Administrator on 2017/8/2 0002. */ f ...
- Linux 下安装jetty服务器
jetty和我们通常使用的tomcat一样,是一个开源的servlet容器,特点是轻量易部署,一方面jetty可以作为web容器使用,另一方面也是最一般的方式是jetty以一组jar包的形式发布,所以 ...
- nodejs-基础
01-nodejs介绍 1.什么是nodejs 1.(javascript跑在机器端,服务端)Javascript on the machine 2.(跑在谷歌v8引擎上)A runtime for ...
- NYOJ--95--multiset--众数问题
/* Name: NYOJ--95--众数问题 Date: 20/04/17 16:02 Description: multiset水过 */ #include<set> #include ...
- 【MySQL源码】源码安装和启动mysql
--[MySQL源码]源码安装和启动mysql --------------------------------------2014/08/19 本机环境:ubuntu12.04,fedora-17 ...
- Selenium2 (python)
包名:selenium 支持浏览器:Firefox,InternetExplorerDriver,OperaDriver,Chrome(要使用一种浏览器应下载相应的driver驱动) 一.基本命令 d ...