原文链接: http://www.juzicode.com/archives/274
1 list定义
List如其名,“清单,列表”,是一种顺序结构的数据类型,定义一个空列表的方法用英文中括号:
变量名=[] l = [] |
定义一个包含了多个元素的列表在中括号中用逗号分隔开各个元素:
源码 | print(‘\n定义list类型:’) l1 = [1,2,3,4] #定义了一个包含4个整型数据的列表 l2 = [1.1,2.2,3.3,4.4,5.5] #定义一个包含5个浮点数据的列表 l3 =[‘www’,’juzicode’,’com’] #定义一个包含了3个字符串数据的列表print(‘l1:’,l1) print(‘l2:’,l2) print(‘l3:’,l3) |
结果 | 定义list类型: l1: [1, 2, 3, 4] l2: [1.1, 2.2, 3.3, 4.4, 5.5] l3: [‘www’, ‘juzicode’, ‘com’] |
前面的定义中列表元素都是同一种数据类型,也可以定义包含了多种数据类型的列表:
源码 | print(‘\n定义list类型包含多类型元素:’) l1 = [1,2.2,’juzicode.com’] #定义了一个包含3个混合元素的列表 print(‘l1:’,l1) |
结果 | 定义list类型包含多类型元素: l1: [1, 2.2, ‘juzicode.com’] |
定义list的时候,list中还可以嵌套list:
源码 | print(‘\n定义list类型包含多类型元素和列表的列表:’) l1 = [1,2.2,’juzicode.com’,[1,2,3]] #定义了一个包含3个混合元素加一个列表的列表 print(‘l1:’,l1) |
结果 | 定义list类型包含多类型元素和列表的列表: l1: [1, 2.2, ‘juzicode.com’, [1, 2, 3]] |
在后面学习了元组,字典,集合之后,你也可以尝试在list中包含这些数据类型。
2 计算list长度
计算list长度就是计算list中包含元素的个数,使用的函数为len(),和计算字符串长度的函数是一样。
源码 | print(‘\n计算list长度:’) l1 = [1,2,3,4] #定义了一个包含4个整型数据的列表 l2 = [1.1,2.2,3.3,4.4,5.5] #定义一个包含5个浮点数据的列表 l3 =[‘www’,’juzicode’,’com’] #定义一个包含了3个字符串数据的列表print(‘l1:’,l1) print(‘l2:’,l2) print(‘l3:’,l3) print(‘l1长度:’,len(l1)) print(‘l2长度:’,len(l2)) print(‘l3长度:’,len(l3)) |
结果 | 计算list长度: l1: [1, 2, 3, 4] l2: [1.1, 2.2, 3.3, 4.4, 5.5] l3: [‘www’, ‘juzicode’, ‘com’] l1长度: 4 l2长度: 5 l3长度: 3 |
从上面的例程可以看出len()函数计算的是list元素的个数,在字符串list中并不是获取到这3个字符串元素的总字符个数。
【实验】思考并动手实验下,l1 = [1,2.2,’juzicode.com’,[1,2,3]] 这种list中包含list,像这个list长度会是多少,计算出来的长度是否会将list内部的list拆分出来呢?
3 索引-使用list元素
因为list是一种有序储存的数据类型,可以像字符串那样根据下标索引查找元素,其下标是从0开始编号的,比如l1 = [1,2.2,’juzicode.com’,[1,2,3]]这个list,其第0个元素l1[0]是1,第1个元素是2.2,第2个元素是’juzicode.com’,第3个元素是[1,2,3],可以这么使用:
源码 | print(‘\n下标索引使用list:’) l1 = [1,2.2,’juzicode.com’,[1,2,3]] #定义了一个包含3个混合元素加一个列表的列表print(‘l1:’,l1) print(‘l1[0]:’,l1[0]) print(‘l1[1]:’,l1[1]) print(‘l1[2]:’,l1[2]) print(‘l1[3]:’,l1[3]) |
结果 | 下标索引使用list: l1: [1, 2.2, ‘juzicode.com’, [1, 2, 3]] l1[0]: 1 l1[1]: 2.2 l1[2]: juzicode.com l1[3]: [1, 2, 3] |
如果索引值大于其长度,将会出现IndexError错误,提示索引值超出了范围:
list的索引值也可以类似字符串,使用负数索引值,-1表示最后一个元素,以此类推:
源码 | print(‘\n负值下标索引使用list:’) l1 = [1,2.2,’juzicode.com’,[1,2,3]] #定义了一个包含3个混合元素加一个列表的列表 print(‘l1:’,l1) print(‘l1[-1]:’,l1[-1]) print(‘l1[-2]:’,l1[-2]) print(‘l1[-3]:’,l1[-3]) print(‘l1[-4]:’,l1[-4]) |
结果 | 负值下标索引使用list: l1: [1, 2.2, ‘juzicode.com’, [1, 2, 3]] l1[-1]: [1, 2, 3] l1[-2]: juzicode.com l1[-3]: 2.2 l1[-4]: 1 |
4 添加元素–append
使用append()函数在list中添加元素,这个元素作为整体添加到list中:
源码 | print(‘\nlist添加元素:’) l1 = [1,2.2,’juzicode.com’,[1,2,3]] print(‘l1:’,l1) l1.append(‘www’) print(‘l1:’,l1) |
结果 | list添加元素: l1: [1, 2.2, ‘juzicode.com’, [1, 2, 3]] l1: [1, 2.2, ‘juzicode.com’, [1, 2, 3], ‘www’] #添加后’www’作为一个整体添加到了list中 |
5 添加元素–extend
使用extend()函数在list中添加元素时,会将被添加对象拆分后添加进list中,下面的例子对比了append和extend的差异,extend将[4,5,6]这个list拆分成了3个元素后再添加到原来的list中,而append则是直接将[4,5,6]作为一个整体添加到了list中:
源码 | print(‘\nlist添加元素-extend:’) l1 = [1,2,3] print(‘l1:’,l1) l1.append([4,5,6]) print(‘l1经过append后:’,l1) l2 = [1,2,3] print(‘l2:’,l2) l2.extend([4,5,6]) print(‘l2经过extend后:’,l2) |
结果 | list添加元素-extend: l1: [1, 2, 3] l1经过append后: [1, 2, 3, [4, 5, 6]] l2: [1, 2, 3] l2经过extend后: [1, 2, 3, 4, 5, 6] |
extend()函数对传入的参数类型是有要求的,类型必须是可以迭代的类型,不然会出现TypeError,单个的整数,浮点数这些数据是不可以迭代的,而字符串、list,tuple,set,dict等是可以迭代的。下面的例子就是extend了一个整数类型的数据抛出的异常:
【实验】聪明的你实验下往一个列表里extend和append 一个字符串,会有什么不一样的效果?
6 切片
List的切片和字符串的切片使用方法是一样的,请参考http://www.juzicode.com/archives/182 中字符串切片的内容:
源码 | print(‘\nlist切片:’) l2 = [0,1,2,3,4,5,6,7,8,9,10] print(‘l2:’,l2) print(‘l2[5:8]:’,l2[5:8]) |
结果 | list切片: l2: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] l2[5:8]: [5, 6, 7] |
7 逆序排列
方法1:使用list内置的reverse()方法,会导致list本身发生改变:
>>> a.reverse() >>> a [5, 4, 3, 2, 1] |
方式2:使用切片方法,切片实际上是可以带3个参数的,三个参数的具体含义是[start:end:step],start,end不填写,step用-1,得到的就是一个逆序排列的list,这种情况下,list本身是不会变化的,这点和reverse()方法是有差异的。
>>> a = [1,2,3,4,5] >>> a[::-1] [5, 4, 3, 2, 1] |
8 获取特定元素索引
使用list内置的index()函数查找某个元素第一次出现的位置,如果存在返回这个元素所在的位置,如果不存在将会抛异常。
>>> lst = [1,2,3,1,2,3,1] >>> lst.index(1) 0 #元素1第一次在位置0出现,返回第一次出现的位置 >>> lst.index(5) Traceback (most recent call last): #元素5不存在,抛异常 File “<stdin>”, line 1, in <module>ValueError: 5 is not in list |