第二章Python序列-列表
列表:
1.创建列表
(1)直接将一个列表对象赋给变量
>>> a=[1,2,3,4,5]
>>> a
[1, 2, 3, 4, 5]
>>> a_list=['a','b','mpilgrim','z','example']
>>> a_list
['a', 'b', 'mpilgrim', 'z', 'example']
>>> a_list=[] #创建空列表
>>> a_list
[]
>>>
(2)用list()将其他类型转化为列表
>>> a=list(range(1,10)) #范围是左闭右开的
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a=list(range(10))#省略1,从0开始
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a=list(range(1,10,2))#从1开始的奇数
>>> a
[1, 3, 5, 7, 9]
2.访问和修改
双向索引
(1)访问:通过索引
>>> a
[1, 3, 5, 7, 9]
>>> a[0]
1
>>> a[-5]
1
(2)通过for语句
>>> a
[1, 3, 5, 7, 9]
>>> for data in a:
print(data)
1
3
5
7
9
修改
3.列表元素的增加
(1)运算符 +(合并列表,生成一个新列表) +=(合并列表,原地操作) * (列表元素重复)
>>> x=[1,2,3,4,5,6]
>>> y=[4,7,8,5,6,9]
>>> id(x)#x地址
2439429513472
>>> id(y)#y地址
2439429650496
>>> z=x+y#合并列表
>>> z
[1, 2, 3, 4, 5, 6, 4, 7, 8, 5, 6, 9]
>>> type(z)#z的类型
<class 'list'>
>>> id(z)
2439426517760
>>> x=x+y
>>> x
[1, 2, 3, 4, 5, 6, 4, 7, 8, 5, 6, 9]
>>> id(x)
2439397895424
>>> x=[1,2,3,4,5,6]
>>> id(x)
2439429513472
>>> x+=y
>>> x
[1, 2, 3, 4, 5, 6, 4, 7, 8, 5, 6, 9]
>>> id(x)
2439429513472
>>> y
[4, 7, 8, 5, 6, 9]
>>> y*3
[4, 7, 8, 5, 6, 9, 4, 7, 8, 5, 6, 9, 4, 7, 8, 5, 6, 9]
>>> y #y不变
[4, 7, 8, 5, 6, 9]
(2)append()方法
语法:append(object)
>>> y
[4, 7, 8, 5, 6, 9]
>>> y.append(0) #原地修改列表,速度快,是真正意义上的在列表尾部添加元素,也是最推荐的方法
>>> y
[4, 7, 8, 5, 6, 9, 0]
(3)指定位置添加 insert()
语法:insert(index,object)
>>> y
[4, 7, 8, 5, 6, 9, 0]
>>> y.insert(3,1) #在下标为3的位置上插入元素6,该位置之后的元素向后移动
>>> y
[4, 7, 8, 1, 5, 6, 9, 0]
(4)extend()可以将另一个可迭代对象的所有元素添加至该列表对象尾部
entend()方法来增加列表与元素也不会改变列表的内存首地址,属于原地操作、
>>> a
[1, 3, 5, 7, 9]
>>> id(a)
2439429649024
>>> a.extend([7,8,9])
>>> a
[1, 3, 5, 7, 9, 7, 8, 9]
>>> id(a)
2439429649024
4.列表元素的删除
(1) del命令
使用del命令删除列表中指定位置上的元素,后面的元素自动向前移动
>>> a
[1, 3, 5, 7, 9, 7, 8, 9]
>>> del a[1]
>>> a
[1, 5, 7, 9, 7, 8, 9]
(2) remove() 删除首次出现的指定元素
>>> a
[1, 5, 7, 9, 7, 8, 9]
>>> a.remove(7) #删除第一个7
>>> a
[1, 5, 9, 7, 8, 9]
循环+remove()
>>> x=[1,2,1,2,1,2,1,2,1]
>>> for i in x:
if i==1:
x.remove(i)
>>> x
[2, 2, 2, 2]
(3) pop()方法 pop([index])
删除并返回指定(默认为最后一个)位置上的元素,如果给定的索引超出列表的范围,则抛出异常
>>> a
[1, 5, 9, 7, 8, 9]
>>> a.pop() #默认删除最后一个
9
>>> a
[1, 5, 9, 7, 8]
>>> a.pop(1) #删除下标为1的值
5
>>> a
[1, 9, 7, 8]
(4) clear()方法:删除列表对象中所有元素
>>> a=[1,2]
>>> a.clear
>>> y
[]
5.查找、 计数、成员判定
(1)查找:index()
>>> a
[1, 2, 3, 1, 6, 5, 1, 4, 5, 1, 2, 6]
>>> a.index(2) #首次出现的缩引
1
>>> a.index(6)
4
(2)计数: count()\
>>> a
[1, 2, 3, 1, 6, 5, 1, 4, 5, 1, 2, 6]
>>> a.count(1)
4
>>> a.count(0)
0
(3)成员判定 in not in
>>> a
[1, 2, 3, 1, 6, 5, 1, 4, 5, 1, 2, 6]
>>> 1 not in a
False
>>> 0 not in a
True
6.切片操作
切片操作是python中有序序列的重要操作之一,适用于列表,元组,字符串,range对象等类型。
语法:[start:stop:stop]
第一个数字表示切片的开始位置(默认为0)
第二个数字表示切片的截至(但不包含)位置(默认为列表长度)
第三个数字表示切片的步长(默认为1),当步长省略时=可以顺便省略最后一个冒号
切片的作用:
截取列表中任何部分得到一个新的列表
>>> a=[3,4,5,6,7,9,11,13,15,17]
>>> a[::]
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> a[::-1] #步长为负数,从右向左切,得到反向副本
[17, 15, 13, 11, 9, 7, 6, 5, 4, 3]
>>> a[::2] #下标从0开始隔一个元素取一个元素
[3, 5, 7, 11, 15]
>>> a[1::2] #下标从1开始,隔一个元素取一个元素
[4, 6, 9, 13, 17]
>>> a[3::] #下标从3开始往后的所有元素
[6, 7, 9, 11, 13, 15, 17]
>>> a[3:6] #下标范围介于[3,6)元素
[6, 7, 9]
>>> a[3:6:1]
[6, 7, 9]
>>> a[0:100:1] #在尾部截断不会抛出异常
[3, 4, 5, 6, 7, 9, 11, 13, 15, 17]
>>> a[100:]
[]
修改和删除列表中的部分元素
为列表对象增加元素
>>> a=[1,2,3]
>>> a[len(a):]=[9] #在尾部追加元素
>>> a
[1, 2, 3, 9]
>>> a[:3]=[1,2,3] #替换前三个元素
>>> a
[1, 2, 3, 9]
>>> a[:3]=[] #删除前三个元素
>>> a
[9]
7.排序与逆排序
使用自身提供的sort()方法可以进行原地操作
>>> a=[3,4,5,6,7,8,9,11,23,45]
>>> import random
>>> random.shuffle(a) #随机打乱顺序
>>> a
[6, 5, 45, 3, 11, 7, 4, 9, 23, 8]
>>> a.sort() #默认为升序排序
>>> a
[3, 4, 5, 6, 7, 8, 9, 11, 23, 45]
>>> a.sort(reverse=True)
>>> a
[45, 23, 11, 9, 8, 7, 6, 5, 4, 3]
>>> a.sort(key=lambda x:len(str(x))) #按转换为字符串后的长度排序
>>> a
[9, 8, 7, 6, 5, 4, 3, 45, 23, 11]
8.内置函数:sorted sum max min len
sorted()
sorted()对列表进行排序,与列表对象的sort()方法不同,内置函数sorted()返回新的列表,并不对原列表进行任何修改
>>> a
[9, 8, 7, 6, 5, 4, 3, 45, 23, 11]
>>> sorted(a) #进行排序
[3, 4, 5, 6, 7, 8, 9, 11, 23, 45]
>>> sorted(a,reverse=True) #降序排列
[45, 23, 11, 9, 8, 7, 6, 5, 4, 3]
>>> a
[9, 8, 7, 6, 5, 4, 3, 45, 23, 11]
2.sum(列表)
对列表元素进行求和运算
同样也适用于元组,集合,range对象,字典,以及map对象和filter对象等等
>>> a
[9, 8, 7, 6, 5, 4, 3, 45, 23, 11]
>>> sum(a) #元组求和
121
>>> a={1:1,2:5,3:8} #对字典的“键”进行求和
>>> sum(a)
6
>>> sum(a.values())
14
>>> sum([[1],[2]],[]) #元素不是数值时需要指定第二个参数
[1, 2]
3.max min
返回列表中最大最小元素
同样适用于元组,字符串,集合,range对象,字典和迭代器对象等等
>>> a=[3,4,5,6,7,8,9,11,23,45]
>>> max(a)
45
>>> min(a)
3
4.len()
返回列表中的个数,同样适用于元组,字典,集合,字符串和range对象
>>> a
[3, 4, 5, 6, 7, 8, 9, 11, 23, 45]
>>> len(a)
10