Python随手笔记第一篇(2)之初识列表和元组


Posted in Python onJanuary 23, 2016

Python中,列表和元组是一种数据结构:序列,序列中的每个元素都被分配一个序号,元素的位置,第一原元素的位置为0,因此类推。序列是最基本的数据结构,列表和元组他们之间具有一定的区别,即列表可以修改,而元组则不能修改!如果要添加元素最好是用列表。

1、 在python中,最基本的数据结构是序列,序列中每一个元素被分配一个序号,即元素的位置,称为索引。索引从0开始,-1表示倒数第一个元素,-2表示倒数第二个元素,因此既可以是从前到后开始对元素进行访问,也可以从后往前对元素进行访问。

2、 python序列中有6种内建的序列:列表、元组、字符串、Unicode字符串、buffer对象,xrange对象。其中有两种常见类型:列表和元组。

列表和元组的主要区别在于,列表可以修改,元组则不能。一般来说,在几乎所有的情况下列表都可以替代元组。一个例外情况:使用元组作为字典的键。因为键不可修改,所以就不能使用列表。

3、 列表中的各个元素通过逗号分隔,写在方括号中。

4、 序列中也可以包含其他序列。

Python随手笔记第一篇(2)之初识列表和元组 

5、 通用序列操作:索引、分片、加、乘、检查某个元素是否属于序列的成员、计算序列长度、找出最大元素、找出最小元素。

6、索引:

序列中的所有元素都是有编号的,从0开始递增,通过编号分别访问。

Python随手笔记第一篇(2)之初识列表和元组 

也可以从最后一个元素往前回溯访问,最后一个元素的位置是-1。

字符串字面值也可以直接使用索引,而不需要一个变量来引用他们,两者效果一样。

Python随手笔记第一篇(2)之初识列表和元组

如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。

7、分片:

Python随手笔记第一篇(2)之初识列表和元组

使用索引来访问序列中的单个元素,

使用分片则可以访问一定范围内的多个元素。

分片操作需要提供两个索引作为边界,第1个索引的元素包含在该分片内,第2个索引则不包含在分片内。

如何访问最后一个元素?

Python随手笔记第一篇(2)之初识列表和元组

原序列中只有9个元素,索引从0到8

Python随手笔记第一篇(2)之初识列表和元组

使用number[6:8]无法获取最后一个元素

使用倒数法number[-3:-1]也无法获取最后一个元素

有两种方法可以成行:

①将后面一个边界索引设置出范围之外,比如number[6:9],将可以涵盖第8个元素

②直接省略后面一个边界索引,比如number[6:],意思就是可以从第6个读取直至最后一个

同理也有:

两个边界索引都空出的话,就可以读出全部元素。

Python随手笔记第一篇(2)之初识列表和元组

另外,对于number[-3:0]出现[]空列表的结果,原因是前一个边界索引元素必须在后一个索引元素左侧,否则结果就是空。

8、为分片设置步长

分片其实包含三个参数[边界1:边界2:步长]

省略步长参数时,步长就取默认值1。

步长为1就会便利边界内的全部元素。

步长大于1时就会间隔的取出元素。

比如设置步长为2,就会每2个元素取出第一个元素,或者说是每隔1个元素取出1个元素。

Python随手笔记第一篇(2)之初识列表和元组

步长不能为0,但步长可以为负数,这样就是倒着取,从右往左取数,相应的边界索引之间不再是第一个索引元素必须在第2个索引左侧的要求,而是:第一个索引元素需要在第二个索引元素的右侧。

比如:

Python随手笔记第一篇(2)之初识列表和元组

Python随手笔记第一篇(2)之初识列表和元组

总结如下:

①步长参数可以省略,省略后取默认值1;

②步长为正时,从序列左侧向右侧取,结果也是这种顺序排列;步长为负时,从序列右侧向左侧取,结果也是按照这种倒着的顺序(相对于原序列来说)排列;

③步长为正时,要求第一个索引元素必须在第二个索引元素的左侧;步长为负时,要求第一个索引元素必须在第二个索引元素的右侧;

④不论是步长为正还是步长为负,第一个索引元素都会被取出,第二个索引元素都不会被取出。

9、序列相加:

两种 相同类型 的序列可以进行相加操作。

比如:

字符串与字符串相加,列表与列表相加。字符串与列表之间不能相加。

Python随手笔记第一篇(2)之初识列表和元组

10、序列乘法:

用数字x乘以一个序列会生成同类型的一个新序列,新序列中原序列会被重复x次。

如果想初始化一个由10个元素的空序列,可以使用乘法来完成,这里也要使用一个python内置的None值。

Python随手笔记第一篇(2)之初识列表和元组

None是表示什么都没有。

Python随手笔记第一篇(2)之初识列表和元组

记住python是区分大小写的。

11、成员存在检查:

检查某个元素是否存在与一个序列中,使用in。若存在,返回true,若不存在则返回false。

Python随手笔记第一篇(2)之初识列表和元组

Python随手笔记第一篇(2)之初识列表和元组

上面两个例子,一个可以用作权限检查,一个可以用作用户名单检查。

下面写一个用户名密码检查:

Python随手笔记第一篇(2)之初识列表和元组

Python随手笔记第一篇(2)之初识列表和元组

12、长度、最小值、最大值:

使用python内建函数len(),max(),min()来求序列的长度、最大值、最小值。如:

Python随手笔记第一篇(2)之初识列表和元组

13、列表

列表可以使用所有适用于序列的标准操作,如:索引、分片、相加、乘法,等等。

列表区别与字符串、元组等其他类型的序列的特征是:列表是可以修改的。

因此,列表有些特殊的操作:元素负值、元素删除、分片赋值、列表方法。

(1)list()函数:

Python随手笔记第一篇(2)之初识列表和元组 

list()函数适用于所有类型的序列,而不只是字符串。

(2)列表赋值:

Python随手笔记第一篇(2)之初识列表和元组 

列表赋值,不能为一个位置不存在的元素进行赋值。

(3)删除元素

从列表中删除元素,使用del语句来实现。

Python随手笔记第一篇(2)之初识列表和元组 

(4)分片赋值

Python随手笔记第一篇(2)之初识列表和元组 

上面的例子,使用list函数对name[7:]这一分片进行了赋值,一次改变了列表name中多个元素的值。

①分片赋值也可以完成替换元素的操作。

Python随手笔记第一篇(2)之初识列表和元组 

上面的例子是用等长的列表替代元列表中等长个数的元素,但是当替代列表没有被替代的元素多时,就发生了直接替代的操作。正如这里使用'world'和'123'对name列表进行替代的操作。

②分片赋值也可以完成插入元素的操作。

当没有被替代的分片元素时,赋值就变成了直接插入元素。

Python随手笔记第一篇(2)之初识列表和元组 

③分片赋值也可以完成删除元素的操作。

Python随手笔记第一篇(2)之初识列表和元组 

用一个空列表来给一个分片进行赋值,相当于直接删除了该分片中的所有元素。

这条语句的作用类似于del number[2:7]。

(5)列表方法:append

append方法用于在列表末尾追加新的对象。

格式:对象.append(参数)

只能有一个参数,是要追加到该对象的元素。

Python随手笔记第一篇(2)之初识列表和元组 

(6)列表方法:count

count方法用于统计某个元素在列表中出现的次数

Python随手笔记第一篇(2)之初识列表和元组 

(7)列表方法:extend

extend方法主要用于使用一个列表扩展另一个列表。

Python随手笔记第一篇(2)之初识列表和元组 

直接将list2扩展补充到list1的末尾。

extend扩展操作与连接操作的不同之处在于:扩展操作修改了原有的列表,而连接操作会返回一个全新的列表。

Python随手笔记第一篇(2)之初识列表和元组 

使用加法的连接操作并没有改变原有的列表。

(8)列表方法:index

index方法主要用于从列表中找出某个值第一个匹配项的索引位置。

Python随手笔记第一篇(2)之初识列表和元组 

index会搜素第一个'aaa'在列表中的位置,返回它的索引值。

如果没有搜索到,换句话说,就是列表中没有出现该对象,那么久会报错,产生异常。

(9)列表方法:insert

insert方法用于将对象插入到列表中。

Python随手笔记第一篇(2)之初识列表和元组 

(10)列表方法:pop

pop方法用于从列表中移除一个元素,并且返回该元素的值。

默认是移除最后一个元素。

Python随手笔记第一篇(2)之初识列表和元组 

如果不指定pop(参数)中的参数取值,那么会自动移除最后一个,如果指定参数值,则会移除指定的那个元素。

pop方法会返回要移除的那个元素,并完成从列表中的移除。

pop相当于栈中的出栈,append相当于栈中的入栈。

pop(0)可以实现队列中的先进先出中的出。

(11)列表方法:remove

remove方法用于移除列表中某个值的第一个匹配项。

Python随手笔记第一篇(2)之初识列表和元组 

只有第一个匹配项会被移除。没有返回值,这是和pop的区别,当移除项不存在与列表中时,不会改变列表本身,并且会报错。

(12)列表方法:reverse

reverse方法将列表中的元素反向存放。

Python随手笔记第一篇(2)之初识列表和元组 

如果只想将列表反向迭代输出,并不改变列表本身,那么可以用reversed()函数来完成

Python随手笔记第一篇(2)之初识列表和元组 

(13)列表方法:sort

对列表进行排序,并改变列表本身。

Python随手笔记第一篇(2)之初识列表和元组

Python随手笔记第一篇(2)之初识列表和元组

字母和数字混在一起,是按照ASCII码进行排序。

如果想对列表进行排序,但又不改变列表本身。那么有:

Python随手笔记第一篇(2)之初识列表和元组

Python随手笔记第一篇(2)之初识列表和元组

想通过赋值,将x.sort()结果赋值给y,但是y返回为空。说明这种赋值是不可行的,因为sort方法不返回任何值。

Python随手笔记第一篇(2)之初识列表和元组 

如果首先将x通过赋值,赋给y,再对y进行sort()方法,希望通过此法对y进行排序而不影响x本身。但是从结果看,对y的sort仍然影响到了x。原因是:通过y=x这种赋值形式,其实并没有产生一个新的列表赋给y,而只是让y指向了与x一样的那个列表,即x和y都指向同一个列表。那么对y进行排序操作,实质上也是和x共同指向的那个列表进行排序,所以也改变了x。

这种让x产生一个副本,对副本进行排序操作而不影响x本身的思路是正确的,只是赋值的形式不当。

Python随手笔记第一篇(2)之初识列表和元组 

通过分片操作可以快速地将一个列表整体复制给另一个变量。

另一种获取已排序的列表副本而不影响列表本身的方法是使用sorted函数。

Python随手笔记第一篇(2)之初识列表和元组 

sorted()是函数,不是方法。因此不能像x.sotred()使用。

sorted()函数可以应用于任何序列。

Python随手笔记第一篇(2)之初识列表和元组 

sort方法是默认的按照升序进行排序。如果需要自定义排序的方向,则可以使用内建函数cmp()来实现。

cmp(x,y) 函数用于比较2个对象,如果x<y返回-1,如果x=y返回0,如果x>y返回1。

sort方法还有另外两个可选参数,key和reverse。

Python随手笔记第一篇(2)之初识列表和元组 

14、元组:

元组和列表一样都是序列,唯一的不同是元组不能修改。

列表是通过方括号括起来,而元组则是通过圆括号括起来。

空列表是[],空元组是()

一个元素的元组(1,)-----也需要用一个逗号,逗号非常重要

多个元素的元组(1,2,3,4)

如果一个元素,写成(1),那么事实上它不是元组,是数1

Python随手笔记第一篇(2)之初识列表和元组 

(1)tuple函数

类似于列表中的list()函数

Python随手笔记第一篇(2)之初识列表和元组 

使用tuple函数时,可以将字符串、列表拆分形成元组。

(2)创建元组

使用tuple()函数创建

列举法创建

Python随手笔记第一篇(2)之初识列表和元组 

(3)访问元组与元组分片

元组分片后还是元组。

Python随手笔记第一篇(2)之初识列表和元组 

(4)一般情况下,在不改变其内容本身的时候,可以使用列表来代替元组。

但是,在两个情况下,元组是不可替代的。

①元组在映射中可以当做键使用,但是列表不行。

②元组作为很多内建函数和方法的返回值存在。

15、小结:

序列:一种数据结构,对其中的元素从0开始编号,编号为-1为倒数第一个元素。

典型的序列是列表、字符串、元组。其中列表是可以修改的,而字符串和元组是不可以修改的,一旦创建就固定了。

可以通过分片操作访问序列的单个元素或者多个元素。分片需要指定起始位置和终止位置。起始位置元素包含在分片内,终止位置元素不包含在分片内。

Python随手笔记第一篇(2)之初识列表和元组 

Python 相关文章推荐
python3.0 字典key排序
Dec 24 Python
Python的加密模块md5、sha、crypt使用实例
Sep 28 Python
python创建进程fork用法
Jun 04 Python
Android分包MultiDex策略详解
Oct 30 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
Python常用模块之requests模块用法分析
May 15 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
浅析Python语言自带的数据结构有哪些
Aug 27 Python
python学生信息管理系统实现代码
Dec 17 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
Python爬虫模拟登录带验证码网站
Jan 22 #Python
Fiddler如何抓取手机APP数据包
Jan 22 #Python
Python爬虫抓取手机APP的传输数据
Jan 22 #Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 #Python
Python中使用urllib2模块编写爬虫的简单上手示例
Jan 20 #Python
Python模拟百度登录实例详解
Jan 20 #Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 #Python
You might like
php 二维数组时间排序实现代码
2016/11/19 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
浅谈webpack4 图片处理汇总
2018/09/12 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python中转换角度为弧度的radians()方法
2015/05/18 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python中的set实现不重复的排序原理
2018/01/24 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
小车司机岗位职责
2013/11/25 职场文书
2014年社区庆元旦活动方案
2014/03/08 职场文书
2014中考励志标语
2014/06/05 职场文书
紧急通知
2015/04/17 职场文书
同学聚会感言一句话
2015/07/30 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
关于的python五子棋的算法
2022/05/02 Python
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript