List在python中是非常常用的一类容器,其功能也很强大,需要加深理解和学习。
1.切片 [起始位置:终止位置:步长] 左闭右开
L = [‘a’,‘b’,‘c’,‘d’]
newL = L[:3] #[‘a’,‘b’,‘c’]
2.多重List的浅拷贝和深拷贝(非常重要)
a = [[1,2,3],[4,5,6]]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(7)
a[1][2] = 10
运行以上代码后,得到的结果是:
a = [[1,2,3],[4,5,10],7]
b = [[1,2,3],[4,5,10],7]
c = [[1,2,3],[4,5,10]]
d = [[1,2,3],[4,5,6]]
解析原因:
b=a相当于给a起了个别名,可以理解为是地址赋值,b中的内容是a中所有元素的地址,所以a无论怎么变化,b都和a一样
c是浅拷贝,相当于是把a的每个List的初始地址给了c,所以当a添加一个7时,c中没有7的这个List的初始地址,所以没有7这个元素
d是深拷贝,相当于把a的每个元素的地址给了d,并且从可变类型变成了不可变类型
以上理解主要是可变对象和不可变对象,一定要理解
3.序列的加法,乘法和初始化
1)序列的加法(连接):本质上讲,字符串也是序列,同类型的序列是可以相加的
L1 = [1,2,3]
L2 = [4,5,6]
L = L1 + L2#[1,2,3,4,5,6]
2)序列的乘法:本质上是重复
L3 = L1 * 2 #[1,2,3,4,5,6]
3)序列的常用初始化方案
L = []
L = [0] * 10
L = [None] * 10
4.序列常见的内置方法
s = ‘sigai’
1)序列的包含关系:in
‘a’ in s -->True
2)序列的长度,最大值,最小值:len,max,min
len(s),max(s),min(s)
3)List与str的相互转化
-str转list:
L = list(s) #l=['s','i','g','a','i']
-list转str:
s_from_l = ''.join(l)#s_from_l=sigai
join函数表示将列表中的元素进行拼接,引号之间的内容表示两两元素拼接中间的内容,此处为空
s_from_l = 'x'.join(l)#s_from_l=sxixgxaxi
5.List的元素或切片的赋值与删除
1)对列表内的元素可以随意赋值和删除
L = list(range(5)) #[0,1,2,3,4]
L[2],L[4] = L[4],L[2]#[0,1,4,3,2]
List中的赋值可以对多个对象同时进行,不需要像C语言等通过中间变量进行操作
del L[2]#[0,1,3,2]
2)列表内的切片可以随意的赋值和删除,还可以用作插入
L = [1,5]
L[1:1] = list(range(2,5))
#L[1:1]表示列表的第二个位置和第三个位置之间,[1,2,3,4,5]
L[2:4] =[] #[1,2,5]
del L[1:] #[1]
6.count函数:计算列表中元素的重复个数
如:
L = [1,1,1,1,2,2]
L.count(1)#4
7.列表的排序
-sorted(L)函数排序后返回,原列表不变
-L.sort()就地排序,直接修改原列表,L.sort()是对象的方法,不是函数,没有返回值
8.初见List comprehension(非常有用,简化代码的神器)
1)求1-100中所有偶数的和(一行代码搞定,太方便了)
sum([x for x in range(101) if x % 2 == 0])
其中,[x for x in range(101) if x % 2 == 0]是一个List,表示的是1-100中所有的偶数
为了避免重复:
关于lambda以及map/reduce还有filter等高阶函数,还在函数式编程章节中记下
关于可迭代对象,生成器,迭代器等内容,会在迭代器章节中记下
8.各种常用方法
list.append(obj)
list.count(obj)
list.extend(seq)
list.index(obj)
list.insert(index,obj)
list.pop(obj=list[-1])
list.remove(obj)
list.sort([func])
list.reverse()