《Python基础教程》学习笔记 – Lesson02:列表和元组

在Python中最基本的数据结构是序列(sequence),第一个索引从0开始;


在Python中,索引可以是负数,-1表示最后一个元素(倒数第一),-2表示倒数第二个元素;


例如:

《Python基础教程》学习笔记 – Lesson02:列表和元组

 

通用序列操作


索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying),判断某个元素是否属于该序列成员、此外,还有计算序列长度,找出最大或最小元素的内建函数;


索引


从 0 开始递增,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

如果索引是负数,则会从最右边开始,也就是从最后第一个元素开始计数,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

序列到 -5 的时候就是最后一个元素了(从右向左),等同于序列 0 ;

例:我们输入一个年份,只对最后 2 位感兴趣;

《Python基础教程》学习笔记 – Lesson02:列表和元组

这里使用 : 表示取一定范围的元素,2:4 表示获取第 3 个和第 4 个元素;

例:输入年月日,以月/日/年的英文+数字形式打印出日期;

代码:

《Python基础教程》学习笔记 – Lesson02:列表和元组

《Python基础教程》学习笔记 – Lesson02:列表和元组

运行结果:

《Python基础教程》学习笔记 – Lesson02:列表和元组

 

分片


可以使用分片操作( : )来访问一定范围内的元素,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

注意:分片操作,第一索引元素是包括其自身在分片内的,而第二个索引元素是不包括其自身在内的,类似数学上的半开区间 [a, b);

例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

在分片操作中如果要取得最后一个元素,可以把第二个索引的最大值加一(以这个例子来说就是numbers[9,10]);

注意:如果分片中,左边的索引比右边出现的晚,结果就是一个空序,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

另外要取得的分片部分包括结尾元素,那么只需空置最后一个索引:
《Python基础教程》学习笔记 – Lesson02:列表和元组

这种方法同样适用于序列的开始以及整个序列:

《Python基础教程》学习笔记 – Lesson02:列表和元组

例,输入一个URL(假设形式为http://www.somedomainname.com),提取域名;

《Python基础教程》学习笔记 – Lesson02:列表和元组

 

步长

在进行分片的时候,默认步长(step length)是1,通常是隐式设置的,这里可以手动设置;步长可以为负数,那么它将会从右到左提取元素;

例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

个人分析,其实就是设步长为n,分片起始地索引为f,分片结束索引为l,目前正在执行的索引序列为t,那么它的执行过程就是:

如果n为正值(伪代码):

loop p1:

t = f;

if t < l then

  (print numbers[t]);

  t = t + n;

else goto ...

goto p1

如果n为负值(伪代码):

loop p1:

t = f;

if t > l  then

  (print numbers[t]);

  t = t + n;

else goto ...

goto p1

 

序列的相加和乘法

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

用过数字x乘以一个序列,会产生一个新序列,原来的序列将被重复x次;

例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

如果要初始化一个空列表,可以使用Python内建值:None,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

例:读取用户输入的一条信息,然后再屏幕上横向居中显示一个矩形,矩形中间显示刚才输入的信息;

代码:

《Python基础教程》学习笔记 – Lesson02:列表和元组

运行结果:

《Python基础教程》学习笔记 – Lesson02:列表和元组

这里的screen_width = 102 是我的屏幕宽度,矩形的宽度比文字宽度大6,每边多3个位置,用来排版的;

 

成员资格

为了检查一个值是否在序列中,可以使用in运算符,这个运算符检测某个条件是否为真,然后返回相应的值,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

最后是检查字符串,字符串最小的单位是字符,所以检测'$$'和空格都能查到(只要是连续的字符),但是查找'空格+!'是查不到的;

再看一个例子:查看输入的用户名和PIN号码是否存在数据列表中;

代码:

《Python基础教程》学习笔记 – Lesson02:列表和元组

运行结果:

《Python基础教程》学习笔记 – Lesson02:列表和元组

 

长度、最小值和最大值


len函数返回序列中包含元素的数量;

min和max函数分别返回序列中最大和最小的元素;

例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

 

列表


list函数

因为字符串不能像列表一样被修改,所以有时候根据字符串创建列表会很有用:

《Python基础教程》学习笔记 – Lesson02:列表和元组


基本的列表操作

 

  • 元素赋值

使用索引标记来为某个特定的元素赋值,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

 

  • 删除元素

使用del语句实现,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

 

  • 分片赋值

例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

《Python基础教程》学习笔记 – Lesson02:列表和元组

numbers[1:1] = [2, 3, 4] 用来在索引1的位置插入几个数;

 

列表方法

 

  • append

用于在列表尾部追加新对象,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组


  • count

统计某个元素在列表中出现的次数,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组


  • extend

在列表末尾追加另一个序列中的多个值,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

extend和字符串连接符+的区别是,+并不会修改原来的某个列表,而是创建一个副本存储新列表,另外也可以使用a[len(a):] = b的方式扩展列表a,不过可读性不如使用extend函数;

 

  • index

用于找出某个值的第一个匹配索引位置,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

如果未找到,触发一个异常;

 

  • insert

将对象插入到列表中,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

insert方法不会替换原有数据,它可以在指定位置添加对象,insert的方法也可以用分片赋值来实现,不过可读性不强;

 

  • pop

该方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

pop()方法会修改原有列表,pop()方法会移除一个元素;

使用pop可以实现常见的数据结构:栈,即:后进先出LIFO;在Python中没有所谓的入栈(push)方法,但是可以使用append方法来代替,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

如果要实现先进后出(FIFO),可以使用insert(0,x)代替append方法,这里意思每次在序列最前端插入数据,每次pop()的数据就是最先存入的数据;或者继续使用append,但必须使用pop(0)来代替pop(),这里的表示,依然使用append在列表后面添加数据,但是pop(0)则是每次在列表最前端弹出数据,也就实现了最先存入的数据先被取出,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

不过最好的解决方案是使用collection模块中的deque对象;

 

  • remove

用于移除列表中某个值的第一个匹配项,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

值得注意的是,remove()是一个没有返回值的方法;

 

  • reverse

将列表中的元素反向存放,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

reverse()方法并不返回值,如果要对一个列表反向迭代(并不修改原来列表),可以使用reversed()函数,它返回一个迭代器(iterator)对象,然后使用list()函数可把返回的对象转换成列表;


  • sort

对列表进行排序,这个排序结果是直接保存在原列表的(2.3版以前不修改原序列,而是返回一个副本),例:

《Python基础教程》学习笔记 – Lesson02:列表和元组


如果要保存原来的列表,可以这样:

《Python基础教程》学习笔记 – Lesson02:列表和元组

不要执行类似如下的操作:

《Python基础教程》学习笔记 – Lesson02:列表和元组

sort()方法在2.3版本后直接修改原有列表,而且它并不返回值;

还要注意,不要使用y =  x,进行列表赋值,来保存原有列表,这是没用的,它实际会让他们指向同一个列表(地址),因为传递的是指针,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

另外,可以使用sorted()函数获取已排序的列表副本,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

它会返回一个已排序的列表,而不会去修改原有列表;

 

  • 高级排序

如果希望元素按照特定方式排序,可以通过compare(x, y)的形式自定义比较函数,compare(x, y)函数会在x > y时返回1,x < y时返回-1,x = y时返回0,内建函数cmp(),提供了比较函数的默认实现方式,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

关键字参数key,可以指定关键字进行排序,如果要按元素长度排序可以,可以指定key=len,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

int型不存在长度对比,他都是根据系统平台来说的:16/32位;

另一个关键字参数reverse是简单的布尔值,用来判断是否进行反向排序,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

 

元组:不可变序列


元组与列表一样,也是一种序列,唯一不同是元组不能修改(字符串也是如此),创建元组的语法很简单:如果用逗号分隔了一些值,那么就自动创建了元组,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

要创建一个元素的元组,可以逗号后面什么都不加,空元组直接写()即可,另外注意长度为1的元组和非元组的区别;

 

tuple函数


把一个序列转换为元组,类似list()把序列转换为列表,如果参数就是元组,那么就会被原样返回,例:

《Python基础教程》学习笔记 – Lesson02:列表和元组

元组也可以进行分片操作;

 

转载于:https://www.cnblogs.com/zero86/archive/2012/11/19/2776784.html