以列表list为例,这个list相当于c++中的数组或vector容器。那列表有哪些常用的操作呢?
获取列表的长度
list = [1,2,3,4,5]
//获取列表的长度
length = len(list)
注意这里与c++不同,c++中的容器都是有各自的定义,每种容器类型都实现了自己的获取本容器的长度的方法,这些方法名字一般都是为size(),但是python不一样,对于python中常用的容器他们一般都是利用python提供的内置函数len来获取列表长度的。python中容器一般不是通过size等方法获取容器其元素的个数。(如果是用户自己实现的类,不在讨论的范围之内)
获取列表中某个元素出现的次数
list = [1,2,2,3,4,5]
#统计列表中2出现的次数
number = list.count(2)
这里获取容器内某个元素出现的次数是通过count方法获取的。count方法是有参数的,参数为元素值。
列表中添加元素
- 在列表末尾添加一个元素:使用append方法。
- 两个列表拼接成一个列表:直接相加即可
- 在列表1中添加一个元素,但是元素是列表2:如果想要将列表2整天加入列表1,使用append方法即可;如果想要将列表2中的内容加入到列表1,而不是将整个列表2作为一个整体加入到列表1,使用extend方法。exntend会把列表打散,将列表中的元素一个一个的加入到列表1汇中;append方法则会将列表2作为一个整体加入到列表1中。
- 在列表的插入中插入元素的方法:使用insert方法,insert方法要指定索引值和插入值;如果要频繁的在头部插入列表,请使用deque(频繁的在头部插入推荐使用deque)。具体使用方法请看下面的示例。
示例如下:
list = [1,2,3,4,5]#向列表中添加一个元素,添加到末尾
list.append(6)
print(f'list = {list}') #输出[1,2,3,4,5,6]#两个列表相加
list1 = [6,7,8]
list = list + list1;
print(f'list = {list}') #输出[1,2,3,4,5,6,7,8]#列表1中使用append方法添加list1
list1 = [6,7,8]
list.append(list1)
print(f'list = {list}') #输出[1,2,3,4,5,[6,7,8]]#列表1使用extend方法添加list1
list1 = [6,7,8]
list.extend(list1)
print(f'list = {list}') #输出[1,2,3,4,5,6,7,8]
from collections import deque# 创建deque对象
numbers = deque([1, 2, 3])# 使用appendleft添加元素
numbers.appendleft(0)
print(list(numbers)) # 输出: [0, 1, 2, 3]# 使用extendleft添加多个元素(注意顺序会反转)
numbers.extendleft([-2, -1])
print(list(numbers)) # 输出: [-1, -2, 0, 1, 2, 3]
删除列表中某个位置的元素
删除列表中的某个元素,有几种情况:
- 知道具体的值,按值进行删除:使用remove方法
- 知道要删除的索引位置,按位置进行删除:del
- 知道要删除的索引位置,不但要删除这个值,还要返回要删除的值:pop方法(最常用的方法之一)
- 删除列表中所有与某个元素相等的值:使用列表推导式和条件表达式批量删除
请看下面的示例:
#pop方法删除元素,如果没有参数,默认删除最后一个元素
#如果有参数,则该参数代表要删除的索引值
list = [1,2,3,4,5]
item = list.pop()
print(f'item={item}') #item=5
print(f'list={list}') #list=[1, 2, 3, 4]
second_item = list.pop(1) #删除列表中索引值为1的元素
print(f'second_item={second_item}') #item=2
print(f'list={list}') #list=[1, 3, 4]#remove方法按值删除
list = [1,2,3,4,5]
list.remove(1)
print(f'list={list}') #list=[2, 3, 4, 5]#安全删除
def safe_remove(list, item):try:list.remove(item)return Trueexcept ValueError:print(f"列表中不存在元素 {item}")return False#按索引位置删除
list = [1,2,3,4,5]
del list[3]
print(f'list={list}') #list=[1, 2, 3, 5]#批量式删除
list = [1,2,2,2,2,2,3,4,5]
list = [value for value in list if value!=2] #列表推导式
print(f'list={list}') #list=list=[1, 3, 4, 5]
获取列表的一部分数据
在python中如果要对指向获取列表的一部分数据,python提供了一种新的形式,即索引和切片,通过这样的方式来获取指定区域的数据。索引值与c++中的一样都是从0开始的,切片需要注意的是左闭右开原则,即包含切片左侧的索引,但是不包括索引右侧的索引。注意切片是可以包含步长的。索引的形式如下:
list左索引值:右索引值]------>左闭右开,即这个切片包括左索引对应的值,但是不包括右索引值
list[:]----->这种表示列表中的所有值
list[:索引值]-------->取这个索引值之前的所有的元素组成的列表
list[索引值:]--------->取从这个元素开始到列表末尾的所有元素
list[索引值:索引值:步长]-------->从左索引值开始到右索引值的前一个元素,每隔步长取元素
list = [1,2,3,4,5,6]
#通过切片的方式获取列表的部分 输出为[2,3,4,5,6]
print(f'list[1:]={list[1:]}') #通过切片的方式获取列表的部分 输出为[2,3]
print(f'list[1:]={list[1:3]}') #通过切片的方式获取列表的部分 输出为[1,2,3]
print(f'list[1:]={list[:3]}')#通过切片的方式获取列表的部分 输出为[1,2,3,4,5,6]
print(f'list[1:]={list[:]}')#通过切片的方式获取列表的部分 输出为[1,3,5]
print(f'list[1:]={list[::2]}')
注意事项
- 列表中的元素数据元素可以不相同