以列表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]}')
注意事項
- 列表中的元素數據元素可以不相同