一、列表的作用
列表在Python中是一个任意类型对象位置的相关有序集合,它没有固定大小,根据数据量的不同可以动态变化。可以对列表中的数据进行赋值、修改、添加、删除等操作。与C\C++中一维数组类似,其索引index是从0开始的而不是从1开始的。可以对列表进行索引、切片、分割等操作。
列表的分割通过设置索引的头下标和尾下标实现[头下标:尾下标],这样就可以截取列表中对应范围内的数值。列表也有其特殊性,列表可以从左向右进行索引,索引号默认从’0’开始,列表也可以从右向左进行索引,最右侧索引号尾’-1’,不要忘记’-‘,这表明了列表的索引方向;列表也可以混合存储整型、浮点型和字符串等类型的数据。
二、列表的操作
Python标准库中提供了更多对列表进行操作的函数如:
1、list.len(): 求取列表中元素个数
2、list.append(x): 把元素x添加到列表的结尾
3、list.extend(L): 将一个给定列表中的所有元素都添加到另一个列表中
4、list.insert(i, x): 在指定位置i处插入一个元素x,需要注意的是元素会插入在原位置元素之前
5、list.remove(x): 删除列表中值为x的第一个元素,如果列表中没有这样的元素,就会返回一个错误。
6、list.pop([i]): 从列表的制定位置删除元素,并将其返回。如果没有指定索引,a.pop()返回的将是列表中最后一个元素,元素随即将从列表中删除(pop([i])中表示元素i是可选的,在实际使用中不需要添加[],在Python的文档中也常遇到这样的问题)
7、list.index(x): 返回列表中第一个值为x的元素的索引
#创建一个列表
list1 = [0,1,2,3,4,5,6,7,8,9]
#求列表的元素个数,并赋值给listLength
listLength = len(list1)
#向列表添加一个元素10
list1.append(10)
#向list1列表中添加一个列表list2
list3 = ['a','b','c']
list1.extend(list2)
#在指定位置处插入一个元素
list1.insert(1,'abc')
#删除list1列表中的值为0的元素
list1.remove(0)
#删除list1列表中指定的位置元素
element = list1.pop()
#查找list1列表中值为5的位置下标
index = list1.index(5)
print('list1 = %s'%list1)
print('listLength = %s'%listLength)
print('element = %s'%element)
print('index =%s '%index)
运行结果:
三、双端队列(把列表当作队列使用)
双端队列(Double-ended queue 或称 deque)在需要按元素增加的顺序来移除元素时非常有用。collections 模块中的 deque 类型(它为在首尾两端快速插入和删除而设计)。双端队列通过可迭代对象(比如集合)创建,而且有些非常用用的方法
from collections import deque #首先从collections 模块中导入deque类
下来我们定义一个双端队列
1、 A=deque([]) #创建一个空的双队列
2、 A.append(n) #从右边像队列中增加元素 ,n表示增加的元素
3、 A.appendleft(n) #从左边像队列中增加元素,n表示增加的元素
4、 A.clear() #清空队列
5、 A.count(n) #在队列中统计元素的个数,n表示统计的元素
6、 A.extend(n) #从右边扩展队列,n表示扩展的队列
7、A.extendleft(n) #从左边扩展队列,n表示扩展的队列
8、 A.pop() #从队列的右边删除元素,并且返回删除值
9.、A.popleft() #从队列的左边删除元素,并且返回删除值
10、A.remove(n) #从队列中删除指定的值
11、A.reverse() #翻转队列
12、A.rotate(n) #旋转队列,默认时值为1,由右边开始旋转,负值代表左边旋转,n代表从队列的第一个元素开始,n从1开始计数
>>> from collections import deque
>>> q = deque(range(5))
>>> q.append(5)
>>> q.appendleft(6)
>>> q
deque([6, 0, 1, 2, 3, 4, 5])
>>> q.pop()
5
>>> q.popleft()
6
>>> q.rotate(3) #右移 3 次
19
>>> q
deque([2, 3, 4, 0, 1])
>>> q.rotate(-1) #左移一次
>>> q
deque([3, 4, 0, 1, 2])
双端队列好用的原因是它能有效地在开头(左侧)增加和弹出元素,这是在列表中
无法实现的。除此之外,它还能够有效地旋转(rotate)元素(也就是将它们左移或右
移,使头尾相连)。;
四、总结
1、list是一种可变的数据类型,跟整型和字串类型不一样,list中的数据可以在内存中进行修改,整型和字符串类型则不能修改。
2、列表操作无非分成增删改查四种类型操作,增:append()函数,expend()函数,insert()函数;删:remove()函数,pop()函数;改:可以通过下标的方式,对数据进行修改,如list1 = ['a','b','c'],list1[0] = 0,得到的结果为:list1 = [0,'b','c'];查:index()函数
3、append()函数添加元素时会追加到列表的末尾;使用remove()函数时,如果要删除的元素并不在列表中,会报错;pop()函数默认删除的是列表末尾的元素(即列表最后一个),返回值为删除的元素;index()函数查找时,返回要查找元素在列表中的位置下标,如果列表中不存在该元素,会报错。