第六章 python3列表list
在开始之前我们先了解一下序列(sequence):
序列中的元素都是有序的,其实在前面已经分享过一种序列了,那就是字符串;Python总共有6个内置的序列:即列表、元组、字符串、Unicode字符串、buffer对象和 xrange对象。
序列的操作包括:索引、长度、切片、遍历、组合(序列相加)、检查成员、重复(乘法)、最小值和最大值。
今天我们了解下数据类型中的列表list,是Python中最常用的序列之一。
使用方括号[ ]来创建列表,元素item间用逗号(,)隔开;实例代码:
从上面的实例我们可以看出,list中的元素item可以是不同类型的对象;还可以看出上面的list在定义时字符串元素item使用了单/双引号,输出结果时Python解释器默认用单引号表示字符串元素,我们自己在定义字符串元素时可以借鉴一下。
1、list 索引和切片
列表的索引和切片与前面讲的字符串索引是相同的, [头下标:尾下标) list切片遵循“左闭右开”原则,也叫“包左不包右”。
实例代码:
合理的使用负索引进行访问和切片,可以提高检索list的效率。对正负索引和切片的概念不清楚的地方,
2、Python中字符串截取(切片)的两种方式
字符串截取,也叫字符串切片,使用方括号[ ]来截取字符串,在Python中单字符也是作为一个字符串使用。
字符串[开始索引:结束索引:步长]
开始索引:从指定位置开始截取;
结束索引:从指定位置结束截取,但不包含该位置的字符。
步长:不指定时步长为1;
字符串[开始索引:结束索引]
首先我们了解下字符串的索引,Python中字符串有两种索引方式,如下图:
列表拼接,拼接后会产生一个新列表。实例代码:
正索引代表从前往后索引,默认从0开始;负索引代表从后往前索引;索引值也可以叫下标,实例代码:
字符串截取 遵循“左闭右开”原则,也叫“包左不包右”:
[开始下标:开始下标)
有两种索引方式就有两种截取方式,实例代码:
根据情况灵活使用这两种索引方式截取字符串,因为会涉及到执行效率的问题,比如:想快速获取最后一部分字符串,使用负索引是最快的。
3、列表拼接,拼接后会产生一个新列表
实例代码:
注意: += 操作符是把b列表中每个元素拼接到了a列表元素的后面。
使用list.append()追加元素,和+=操作符是有区别的,实例代码:
可以看出,append(obj) 参数整体作为一个元素被追回到b列表最后一位,这就是下面要讲的嵌套。
4、list 嵌套
在前面刚才提到了list中的元素可以是不同的数据类型对象;实例代码:
说明:
list_a[-1]:取出a列表最后一位元素,它是list类型;
list_a[-1][-1]:取出a列表最后一个元素中的最后一个元素。
5、Python内置函数
用 in 判断是否存在于列表中
列表推导式:这个很重要也比较常用,格式如下:
[表达式 for 变量 in 可迭代对象]
或
[表达式 for 变量 in 可迭代对象 if 条件]
6、list 常用的几个方法
注意了,上面list.sort()只针对元素类型相同的列表进行排序,不同类型元素的列表进行排序是会报错的;实例代码:
总结一下sort与sorted区别:
sort是list自身的方法;sorted是Python内置函数,可以对所有可迭代的对象进行排序操作。
list的sort方法改变的是原列表中元素的顺序,而内置函数sorted返回的是一个新的list,原列表保持不变。
总结一下上面的列表复制:
id() 获取对象的内存地址,这样 = 和 copy()两者的区别就明显了;
使用=是引用赋值,两个对象指向同一块内存地址,变更其中一个另外一个也会跟着变;
copy()是复制一个副本,原对象和新复制的对象互不影响。
del语句删除一个或者多个对象的引用(引用可以理解为给对象贴的标签),而不是删除内存中的对象(value);
当某个对象的所有引用都被删除后(对象的所有标签被撕完后),会自动执行魔法方法__del__将这个对象作为垃圾回收掉。实例代码: