Python列表常用操作小技巧(python列表有哪些常用操作)
2024-08-30
更新時間:2024-08-30 00:05:09作者:佚名
在上一篇文章中,我們回顧了Python元組常用操作小技巧,這篇文章我們繼續(xù)聊聊Python里另一種常用的數(shù)據(jù)類型 – 列表(List)。
和元組一樣,列表也是一種序列,通過方括號[和]即可創(chuàng)建。列表中的值常被稱為元素,元素的數(shù)據(jù)類型可以不同,如test_list = [0,1,1,’a’,’b’]就能成功創(chuàng)建一個列表。
不同于元組,列表是可變序列,因此序列可用的操作會更加靈活,接下來我們來回顧列表最常用的操作。
以列表people = [‘Adam’,’Nick’,’Tony’]為例,可以使用for循環(huán)進行遍歷:
for i in people: print(i)
當需要更新列表時,使用下標遍歷會更加方便:
for i in range(len(people)): people[i] += '_suffix'
和元組一樣,可以通過切片來獲取列表的元素(Python的下標從0開始計算):
print(people[:2])
輸出為:
['Adam','Nick']
a. pop方法可以返回要刪除的值,可以使用下標進行刪除,或者刪除最后一個元素:a = people.pop(2)或者a = people.pop(),a的值都將是’Tony’,而原列表將會刪除對應的元素。
b. 如果你不需要使用刪除的值,del是一個好辦法:del people[0],則people列表將變?yōu)閇‘Nick’,’Tony’]。
c. remove方法將刪除列表中第一個所需刪除的元素,如進行test_list.remove(1)操作后,列表將變?yōu)閠est_list = [0,1,’a’,’b’],注意,remove方法不返回任何值。
列表和字符串能夠靈活地進行轉換,比如將字符串轉化為列表:
# 將字符串轉化為列表name = 'Adam is very cool'name_list_1 = list(name)print(name_list_1)# Split 方法能使用分隔符分割字符串name_list_2 = name.split()print(name_list_2)
輸出為:
['A', 'd', 'a', 'm', ' ', 'i', 's', ' ', 'v', 'e', 'r', 'y', ' ', 'c', 'o', 'o', 'l']['Adam', 'is', 'very', 'cool']
而有時需要將列表合并成一個字符串,join方法非常好用:
# 用空格連接列表的元素,組成一個新的字符串print(' '.join(['Adam', 'is', 'very', 'cool']))
輸出為:
'Adam is very cool'
這是一個容易出錯的點,下列代碼中,兩個變量是完全一樣的,改變一個,另一個的值也會跟著改變:
# alias是列表name的別名name = ['Adam', 'is', 'very', 'cool']alias = namealias.pop()print(name)
輸出為:
['Adam', 'is', 'very']
因此,希望使用兩個獨立的列表時,盡量使用單獨的賦值語句或者淺復制:
name = ['Adam', 'is', 'very', 'cool']# 創(chuàng)建值一樣的列表name_2 = ['Adam', 'is', 'very', 'cool']# 淺復制name_3 = name[:]
元組可以通過*運算符作為參數(shù)傳入函數(shù)中,列表也可以作為參數(shù)輸出到函數(shù)中,此時函數(shù)會得到列表的一個引用,意味著如果函數(shù)中對列表進行了修改,那么原列表也將被修改,示例如下:
#定義一個函數(shù),刪除列表的第一個元素def del_head(t): del t[0]name = ['Adam', 'is', 'very', 'cool']del_head(name)print(name)
輸出為:
['is', 'very', 'cool']
參數(shù)t和變量name指向同一個列表,因此當t變化時,name也變化了。這個知識點十分重要,在編寫函數(shù)時,要非常注意操作是否會創(chuàng)建一個新的列表,還是在原有列表上作變化。
如果想通過一個函數(shù)對列表進行操作,映射(map)和列表推導式是很好的選擇。Python提供的內置函數(shù)map接收兩個參數(shù) – 映射函數(shù)和迭代對象,返回一個迭代對象,示例如下:
# 返回元素的平方def square(n): return n*ntest_list = [1,2,4,5]result = map(square, test_list)print(result)print(list(result))
輸出為:
<map object at 0x1101b9400>[1, 4, 16, 25]
使用列表推導式也可以完成上述操作:
test_list = [1,2,4,5]result = [i*i for i in test_list]print(result)
輸出為:
[1, 4, 16, 25]
上述知識基本概括了列表的常見操作,簡單總結一下經驗:
大部分列表方法都是修改參數(shù)并返回None,一定要注意選擇合適的方法,確保變量的安全性。實現(xiàn)同一種操作有很多種辦法,有時用錯誤的方法不會報錯,但結果有可能不對,確保理解了個中差異后再選擇合適的方法。謹慎使用列表的別名,其實不止列表,其他的數(shù)據(jù)類型也會有別名的機制。希望這些知識點對你有幫助,來一道leetcode算法題鞏固一下列表知識吧,歡迎在評論區(qū)留下你的答案!下次我們將聊聊字典(Dict)。
題目:旋轉數(shù)組
給定一個數(shù)組,將數(shù)組中的元素向右移動 k 個位置,其中 k 是非負數(shù)。示例:
輸入: nums = [1,2,3,4,5,6,7], k = 3輸出: [5,6,7,1,2,3,4]解釋:向右旋轉 1 步: [7,1,2,3,4,5,6]向右旋轉 2 步: [6,7,1,2,3,4,5]向右旋轉 3 步: [5,6,7,1,2,3,4]