二、学习内容
I.列表(list)
1.定义
列表(list)为有序集合,可以保存任意类型的对象,语法为[元素1,元素2,……,元素n]。列表的语法点在于用中括号“[]”将元素放在一起,用逗号“,”将元素隔开
2.创建列表
列表可以通过直接赋值创建,也可以用内置方法list(sub)把可迭代对象sub转化为列表,其中sub可以为range对象、字符串等。此外,在上次的学习中学习的列表推导式也可以用于创建列表,例如:
a=[1,2,'Python',True] #直接赋值创建列表,元素为任意对象,列表中保存的是对象的引用
print(a,type(a))
#运行结果:
#[1,2,'Pthon',True] <class'list'>
b=list(range(1,11)) #通过list()方法将range对象转换为列表
print(b,type(b))
#运行结果:
#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] <class 'list'>
c=[i*2 for i in b] #通过推导式创建列表
print(c,type(c))
#运行结果:
#[2, 4, 6, 8, 10, 12, 14, 16, 18, 20] <class 'list'>
d=[] #创建空列表,之后可以用list类的内置方法添加元素,详见下文
f=[[1,2,3]]*3 #列表的元素也可以是容器类型
print(f,type(f)) #*3的操作意为将创建了3份原列表的引用,看似是3个相同的列表拼在了一起
f[0][1]=5 #其实这3个相同列表的引用都是一样的,都指向原列表
print(f,type(f)) #只要一个列表产生变化,原列表就会变化,其他被拼接起来的列表也会变化
#运行结果:
#[[1, 2, 3], [1, 2, 3], [1, 2, 3]] <class 'list'>
#[[1, 5, 3], [1, 5, 3], [1, 5, 3]] <class 'list'>
3.列表的添加、删除操作
列表中有一些内置方法,可对列表进行添加或删除元素的操作。这些操作对列表的id不产生影响,这表明列表是可变的。字典和集合也是可变的,而数值、元组、字符串是不可变的。
判断一个数据可不可变可以用hash()方法判断,如果参数的数据类型是可变的,那么就会报错。
(1)添加元素
list.append(obj)在列表末尾添加新的对象,只接受一个参数,参数可以是任何数据类型,被追加的元素在 list 中保持着原结构类。append()方法一次只添加一个元素,若参数obj为一个列表,那么这个列表会作为一个整体添加到 list 中;
list.extend(seq)在列表末尾一次性追加另一个序列中的多个值,参数seq为列表,此方法用新列表seq拓展原列表list。相当于把seq接到list的末尾,是对list的操作,无返回值;
list.insert(index,obj)在编号index的位置插入元素obj。对参数obj的要求和append()一样,index表示第几个间隔,index从0数起。
例程:
x=list(range(1,6))
print(x) #运行结果:[1,2,3,4,5]
x.append(6) #在末尾添加元素6
print(x) #运行结果:[1,2,3,4,5,6]
x.append([7,8]) #参数obj为列表,将列表整体当作一个元素添加到末尾
print(x) #运行结果:[1,2,3,4,5,6,[7,8]]
x.extend([9,10]) #用列表[9,10]拓展x,即将[9,10]中的所有元素添加到x的末尾
print(x) #运行结果:[1,2,3,4,5,6,[7,8],9,10]
x.insert(0,'Numbers') #在第0个间隔之间(即最左端)插入字符串'Numbers'
print(x) #运行结果:['Numbers',1,2,3,4,5,6,[7,8],9,10]
(2)删除元素
list.remove(obj)删除列表中第一个与obj相同的元素。remove()方法为对list的一项操作,无返回值;
list.pop([index=-1])返回并删除列表中index位置的元素。index为可选参数,表示列表的索引,索引相关详见下文。pop()方法默认取出列表中的最后一个元素;
del语句可以用于删除单个或多个列表对象。具体用法为 del list[var1],或del list[start:end:step]。del 语句原本就可以用于删除变量,若del 后面写的是列表则删除整个列表,若写的是列表的切片则删除列表中相对应的元素。
例程:
x=['I','Love','Python',1,2,3]
print(x,type(x)) #运行结果:['I','Love','Python',1,2,3] class<'list'>
x.remove('I') #删除x中的'I'
print(x) #运行结果:['Love', 'Python', 1, 2, 3]
y=x.pop() #从x中取出最后一个元素赋给y
print('x=',x,'\ny=',y,sep="") #运行结果:x=['Love', 'Python', 1, 2]
# y=3
del x[2],x[2] #删除x中的第3个元素,依次执行
print(x) #注意:del语句后的删除对象是依次执行的,先执行完一次
#删除x[2]后x[3]就没有了,然后再执行一次删除x[2]
#运行结果:['Love', 'Python']
4.列表元素选取
(1)索引
可以通过list[index]的方式表示列表list中的元素,index为索引值,整数,从0开始。
若index为负数,则从右到左数起。例如list[-1]是列表list的最后一个元素,list[-2]是列表list的倒数第二个元素。
(2)切片
切片是一种一次性从列表里进行多个索引的方式,写法为list[start:end:step=1],start为选取的第一个元素,end为选取的最后一个元素,step为步长,默认为1。切片有四种用法:
list[start:] 从start位置开始,选取后面的所有元素
list[:end] 从第一个元素开始,选取到end位置的前一个元素(含头不含尾)
list[start:end] 从start位置开始,选取到end位置的前一个元素
list[start:end:step] 从start位置开始,每隔step个间隔选取一个元素,直到end位置为止(不含end位置上的元素