一、创建列表
1、使用方括号创建列表
a=[] #创建空列表
a=[1,3,6,8] #创建非空列表
2、创建类list的实例
a=list() #创建空列表
a=list("abc") #得到列表["a","b","c"]
3、使用推导式生成列表
a=[x for x in range(6)] #等效于list(range(6))
b=[3*x for x in a]
特别提示:
列表推导式的一般格式为:[A for x in B if C]
作用:对可迭代对象B中的每一个元素x,如果满足条件C,则按表达式A生成列表的一个元素。
4、使用字符串的split方法生成列表
a="1,2,30,40"
b=a.split(",") #用逗号分割字符串为列表。b=["1","2","30","40"]
c=a.split(",",2) #仅得到前2项,其余项为第3项。c=["1","2","30,40"]
二、列表的基本操作
1、索引和切片
(1)列表是序列,支持索引和切片。其操作请参考“字符串的索引和切片”。
示例:设a=[1,2,3,4],则:
通过索引读取列表项:b=a[0]+a[-1] #b的值为5。
通过切片提取列表的元素:b=a[1:] #b的值为[2,3,4];c=a[1:3]的值为[2,3];a[::-1]的值为[4,3,2]。
(2)列表是可变对象,可通过索引或切片对列表部分项进行修改。
示例:设a=[1,2,3,4],则执行“a[1:3]=[7,8]后a的值为[1,7,8,4]。
2、列表的运算
(1)成员运算符(in、not in)
利用成员运算符可判断数据是否为列表的元素。如:2 in [1,2,3,4]的值为True;2 not in [1,2,3,4]的值为False。
(2)连接运算符(+)
连接运算符可实现二个列表的合并。如:a=[1,2]+[3,4],则a的值为[1,2,3,4]。
(3)重复操作符(*)
重复操作符可快速生成具有重复数据的列表。如:a=[1,2]*3,则a的值为[1,2,1,2,1,2]。
3、删除列表的元素
(1)利用del语句
示例:a=[1,2,3,4,5],则执行“del a[0::2]”后a的值为[2,4]。
(2)使用列表的内置函数pop
格式:pop(index)
作用:删除索引值为index的元素。如果index缺省,则删除最后一个元素。函数的返回值为删除的元素。如果index错误,则会触发异常。
示例:a=[1,2,3,4,5],则执行“x=a.pop()”后a的值为[1,2,3,4]、x的值为5。
(3)使用列表的内置函数remove
格式:remove(value)
作用:删除元素value。如果value不在列表中,则会触发异常。该函数没有返回值。如果列表中有多个元素的值为value,则删除左起第一个。
示例:a=[1,2,3,4,5,4],则执行“a.remove(4)”后a的值为[1,2,3,5,4]。
4、列表排序
(1)使用列表的内置函数sort
格式:sort(key=None,reverse=False)
---key可选,指定比较函数。
---reverse可选,为True降序,为False升序(默认值)。
---执行sort排序后,列表id不变,但元素顺序发生了变化。
示例:a=['21','43','35','16'],则执行“a.sort(key=int,reverse=True)”后a的值为['43', '35', '21', '16']。
(2)使用Python内置函数
格式:sorted(key,reverse)
---参数作用与sort相同。
---排序后,列表并没有变化,函数返回一个排序后的新列表。
示例:a=['21','43','35','16'],则执行“a= sorted(a,key=int,reverse=True)”后a的值为['43', '35', '21', '16']。
三、列表的内置函数
1、append(item):在列表末尾追加项item。
a=[1,2,3,4]
a.append(5) #a=[1,2,3,4,5]
b=[ [] ]*3 #b=[[ ],[ ],[ ]]
b[0].append(1) #b=[ [1],[1],[1] ]
注意:通过*生成的列表,项是同一个。
2、count(item):统计项item在列表中出现的次数。
a=[1,2,1,3,1,4],则a.count(1)的值为3
3、extend(t):在列表末尾添加多个值(t为列表)。
a=[1,2,3]
a.extend([4,5]) #a=[1,2,3,4,5]
4、index(value,start,stop):在索引值在start与stop的元素中查找元素value。
如果存在项,则返回第一个匹配项的索引。否则报ValueError异常。
a=[1,2,1,3],则a.index(1)的值为0
可参考以下代码确定项是否存在,存在时输出项的索引,不存在时输出“No”:
if 4 in a:
print(a.index(4))
else:
print("No")
5、insert(index,item):在索引位置index插入项item。
a=[1,2,3]
a.insert(1,4) #a=[1,4,2,3]
6、pop(index):移除索引位置index对应的项并返回移除项的值。
a=[5,6,7,8]
b=a.pop(1) #移除索引为1的项。a=[5,7,8],b=6
a.pop( ) #移除最后一项
7、remove(item):根据值item移除项。项不存在时报ValueError错误。
a=[5,6,7,8]
a.remove(6) #a=[5,7,8]
8、reverse( ):将列表反向(逆序)。
a=[1,2,3]
a.reverse( ) #a=[3,2,1]
9、sort(key,reverse):排序。
参数key可选,指定排序的比较键。
参数reverse可选,为True降序,为False升序(为默认值)。
a=[2,1,5,3]
则:执行“a.sort( )”后,a=[1,2,3,5]
10、clear( ):清空列表。
a=[1,2,3],则执行“a.clear( )”后,a=[ ]
11、copy( ):创建列表副本
a=[1,2,3]
b=a.copy( )
说明:
----创建的副本ID与原列表的ID是不同的。
----c=a时c与a有相同的ID。
四、列表相关函数
1、len:返回列表项个数。如:
a=[11,25,30,461],则len(a)的值为4
2、max:返回列表的最大值。要求列表元素类型相同。如:
a=[21,4,9,11],则max(a)的值为21
a="How abcd a 12345"
x=a.split(" ")
s=max(x,key=len) #以长度作为比较函数,求x的最大值
3、min:返回列表的最小值。要求列表元素类型相同。如:
a=[21,4,9,11],则min(a)的值为4
4、list:将一个可迭代对象转为列表。如:
a=list("abc"),则a=['a','b','c']
5、sorted:返回排序后的新列表。如:
a=[2,5,1]
b=sorted(a) #b=[1,2,5]。注意!a=[2,5,1]
五、列表排序的几点说明
1、可由key参数指定排序的比较函数。如:
a=["abc","de","12345"]
a.sort(key=len)
#“key=len”表示按长度排序。故a=["de","abc","12345"]
a=["12","3","20"]
a.sort() #按字母顺序比较:a=["12","20","3"]
a.sort(key=int) #按转换后的数值比较:a=["3","12","20"]
2、元素为元组或列表时,不使用key参数,只能对元素的第一元素排序。如:
a=[[2,1],[3,2],[1,3]]
a.sort( ) #a=[1,3],[2,1],[3,2]]
3、可以使用key参数对组成列表元素的元组(或列表)按其他元素排序。如:
x=[(3,1,2),(1,2,3),(4,3,1)]
x.sort(key=lambda a:a[2]) #按元组的第3个元素排序
print(x) #x=[(4, 3, 1), (3, 1, 2), (1, 2, 3)]
#lambda定义一个匿名函数,用作排序的比较函数。参考自定义函数部分。
4、利用key参数也可实现多重排序。如:
a=[[5,4,3],[2,4,1],[3,1,6]]
a.sort(key=lambda x:[x[1],-x[2]) #a=[[3,1,6],[5,4,3],[2,4,1]]
#运行效果:按项的第2个值升序、再按第3个值降序。

