[python]学习笔记——列表
Python列表的主要属性:
1)任意对象的有序集合
2)通过偏移读取
3)可变长度、异构和任意嵌套
4)属于可变序列的分类
5)对象引用数组
一、创建列表list0之后
1、在在列表末尾增加一个数据项,使用append()方法
list0.append("data")
2、从列表末尾删除一个数据项,使用pop()方法
list0.pop()
3、从列表末尾增加一个数据项集合,使用extend()方法
list0.extend(["data0","data1","data2", ...])
4、从列表中找到并删除一个数据项,使用remove()方法
list0.remove("data")
5、在列表中某一特定位置前添加一个数据项,使用insert()方法
list0.insert(n,"data") #n表示列表中某一特定位置
6、是列表中的数据项升序排列,使用sort()方法
list0.sort() #sort()方法还有两个可选参数:key和reverse(布尔值)
7、将列表中的所有数据翻转,使用reverse()方法
list0.reverse()
8、查找列表中某元素的偏移量,使用index()方法
list0.index()
9、列表的高级排序方法,使用cmp()方法
cmp(x,y)
当x>y时 返回值:1
当x=y时 返回值:0
当x<y时 返回值:-1
二、迭代的方法打印列表的数据
1 list1 = ['data0','data1','data2','data3', ... ,'dataN'] 2 3 for each_data in list1: 4 5 print each_data
python中的for循环就是为了处理列表和python中的其他迭代结构
列表时python中最常用的迭代数据结构,需要迭代处理一个列表时,最好使用for循环
也可以使用while循环
1 count = 0 #使用while循环需要考虑一个状态信息,要加入一个count计数器 2 while count < len(list1): 3 print list1[count] 4 count = count + 1 5 #以上代码效果等同于上面的for循环
列表中可以嵌套列表,使用for循环时,只会打印出最外层的列表,而嵌套的列表则只会原样打印出来
三、在列表中查找列表
每次处理列表时,要查看处理的数据项是不是列表,如果是列表则要在处理下一个数据项之前先处理这个嵌套的列表
在Python中使用if...else...的模式。
Python中内置了一个isinstance(name,type)的方法 #name是变量的名称,type是变量的类型,其返回值为True或者False
1 ls0 = ['aa',['aaa',['aaaa','aaab','aaac'],'aab','aac'],'bb','cc'] 2 3 for lsa in ls0: 4 if isinstance(lsa,list): 5 for lsb in lsa: 6 if isinstance(lsb,list): 7 for lsc in lsb: 8 print lsc 9 else: 10 print lsb 11 else: 12 print lsa
运行程序,打印出的结果
aa aaa aaaa aaab aaac aab aac bb cc
多层的嵌套循环可以打印出列表中的列表中的列表中的数据,但是方法过于麻烦繁琐,令人头疼
发现上面的多层嵌套代码重复性语句过多,可以使用函数来减少代码的重复
1 ls0 = ['aa',['aaa',['aaaa','aaab','aaac'],'aab','aac'],'bb','cc'] 2 3 def DisplayLst(input_lst): 4 for lsa in input_lst: 5 #如果数据项是列表类型,则调用Displayst函数,否则打印此数据项 6 if isinstance(lsa,list): 7 DisplayLst(lsa) 8 else: 9 print lsa 10 11 DisplayLst(ls0)
解决之道:递归
使用函数和递归把复杂的多层嵌套简单化(Python3中允许的嵌套层数不超过100)
四、列表的解析
list2 = [[1,2,3],[4,5,6],[7,8,9]] list21 = [row[1] for row in list2] >>list21 [2,5,8] >>[row[1]+1 for row in list2] [3,6,9] >>[row[1] for row in list2 if row[1] % 2 == 0] [2,8] >>[list2[i][i] for i in [0,1,2]] [1,5,9] >>[c * 2 for c in 'spam'] ['ss','pp','aa','mm'] >>G = (sum(row) for row in list2) >>next(G) 6 >>next(G) 15 >>list(map(sum,list2))
[6,15,24]