list列表,python中最常用最重要的数据类型,熟练掌握列表的使用对于python的学习至关重要
本文中的列表实例都是用lst来代替
1.列表的创建
通常使用中括号[],或者list()来创建列表,这个不多说了,列表中的元素可以是任何元素,数值,字符串,甚至嵌套的列表,字典,集合,元组都可以
lst=[1,'abc',['a','b'],(1,'a'),{'a':1},{1,'a'}]
print(type(lst))
#out: <class 'list'>
2.列表的查、修、增、删
2.1查找与修改
利用下标索引进行查找,正向索引从0开始,逆向索引从-1开始。修改直接覆盖。
lst=[1,2,3,'a','b','c']
print(lst[0],lst[-1]) #用索引直接正向逆向查找
#out: 0 c
lst[1]='second' #索引直接修改元素,修改原列表
print(lst)
#out: [0, 'second', 2, 'a', 'b', 'c']
2.2添加元素
直接从列表队尾添加新元素lst.append(var)
利用索引在某个位置插入新值lst.insert(n,var)
lst=[1,2,3,'a','b','c']
lst.append('d')
print(lst)
#out: [1, 2, 3, 'a', 'b', 'c', 'd']
lst.insert(3,4)
print(lst)
#out: [1, 2, 3, 4, 'a', 'b', 'c', 'd']
串联合并列表:用’+‘将两个列表串联,开辟新的内存空间。
用extend()函数合并两个列表
lst1=[1,2,3]
lst2=['a','b','c']
lst3=lst1+lst2
print(lst3)
lst1.extend(lst2)
print(lst1)
#Out:
#[1, 2, 3, 'a', 'b', 'c']
#[1, 2, 3, 'a', 'b', 'c']
2.3删除元素
根据下标删除
lst.pop(n):n表示索引下标。pop一次只能删除一个元素。不同于字典的pop(),列表的pop最多只能有1个参数,可以不填默认为删除最后一个元素,有返回值。n不能越界,否则会报错
lst=[1,2,3,'a','b','c']
n=lst.pop()
print(n,lst)
#out: c [1, 2, 3, 'a', 'b']
del lst[n]:用del删除列表元素虽然可以实现多个元素删除,但删除并不是同时进行的,而是删除完一个之后再删除下一个,而这会带来的问题就是列表元素的下标索引会发生变化。
lst=[1,2,3,'a','b','c']
del(lst[3],lst[4],lst[5])
print(lst)
#out: IndexError: list assignment index out of range
lst=[1,2,3,'a','b','c']
del(lst[3],lst[3],lst[3])
print(lst)
#out: [1, 2, 3]
可以看到用第一次用del进行批量删除操作时发生了错误,原因就是del并不是同时删除下标为3,4,5的元素,而是每次只删除一个下标元素,再对进行了删除操作之后的列表进行下一次删除操作。所以del通常也只用来删除一个元素
根据元素值来删除
用lst.remove(var)可以实现根据元素值来进行删除。
其实稍微修改下也可以用remove实现用下标来删除,改为lst.remove(lst[n])即可
lst=['a','b','c','d','e']
lst.remove('a')
print(lst)
#out: ['b', 'c', 'd', 'e']
lst.remove(lst[0])
print(lst)
#out: ['c', 'd', 'e']
3.列表的切片
lst[n1:n2:step]:表示从n1到n2的前一个数,以step为步长,复制的列表。如果n2<n1,则step可以为负数,表示逆切片。step可以省略,默认为1。如果n1或者n2省略,则表示从头开始/到尾结束。
切片可以被赋值与插入
lst=[1,2,3,4]
print(lst[1:2])
lst[1:2]=['x','a']
print(lst)
#Out:
#[2]
#[1, 'x', 'a', 3, 4]
关于列表可以注意的一点是,列表的切片是属于浅拷贝,在涉及到列表嵌套的时候需要注意。关于深拷贝,浅拷贝以及切片与sorted排序的拷贝问题可以看这篇文章
4.列表的排序
4.1列表的排序
lst.sort():直接对列表进行排序,修改原列表
sorted(lst):没有对原列表进行修改,在缓存空间中做出排序
两者都默认为升序排列,都有一个可选关键词reverse,表示是否逆排序。默认为False
lst=[6,5,4,1,2,3]
lst2=sorted(lst)
print(lst,'\n',lst2)
#out:
#[6, 5, 4, 1, 2, 3]
#[1, 2, 3, 4, 5, 6]
lst.sort()
print(lst)
#out: [6, 5, 4, 3, 2, 1]
4.2列表的逆向
列表的逆向,即把列表中的元素位置翻转。
lst.reverse():直接对lst进行逆向,修改原列表
列表的逆向切片同样也能实现这个效果,但是并不是直接对列表进行修改,而是返回一个浅拷贝
lst=[6,5,4,1,2,3]
lst2=lst[::-1]
print(lst,'$',lst2)
#out: [6, 5, 4, 1, 2, 3] $ [3, 2, 1, 4, 5, 6]
lst.reverse()
print(lst)
#out: [3, 2, 1, 4, 5, 6]
5.列表的统计
len(lst):统计列表长度,常与for循环跟range()函数连用,实现对lst的遍历
lst.count(var):统计列表中某个元素出现的次数
set(lst):把列表转化为set集合,集合的特点是没有重复的元素,所以lst中重复的元素都会被删除,只需要比较sets跟lst的长度,就可以判定lst中是否有重复元素
lst=['a','b','c','d','a']
le=len(lst)
n=lst.count('a')
print(le,n)
#out: 5 2
sets=set(lst)
n1=len(sets)
n2=len(lst)
print(n1,n2)
#out: 4 5
数字列表的统计
max(lst):统计lst中的最大值
min(lst):统计lst中的最小值
sum(lst):计算lst的总和
numlst=[1,2,3,4,5]
maxnum=max(numlst) #求列表最大值
minnum=min(numlst) #求列表中的最小值
sumnum=sum(numlst) #求列表的总和
print(maxnum,minnum,sumnum)
#out: 5 1 15
max,min,sorted函数都有一个key关键字,可以跟lambda函数连用,实现更多的操作,会在之后讲lambda函数的时候详细介绍