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]