1 前言
在上一篇文章中,我們回顧了Python元組常用操作小技巧,這篇文章我們繼續聊聊Python里另一種常用的數據類型 – 列表(List)。
和元組一樣,列表也是一種序列,通過方括號[和]即可創建。列表中的值常被稱為元素,元素的數據類型可以不同,如test_list = [0,1,1,’a’,’b’]就能成功創建一個列表。
不同于元組,列表是可變序列,因此序列可用的操作會更加靈活,接下來我們來回顧列表最常用的操作。
2 列表常用操作
2.1 遍歷列表
以列表people = [‘Adam’,’Nick’,’Tony’]為例,可以使用for循環進行遍歷:
for i in people:
print(i)
當需要更新列表時,使用下標遍歷會更加方便:
for i in range(len(people)):
people[i] += '_suffix'
2.2 切片
和元組一樣,可以通過切片來獲取列表的元素(Python的下標從0開始計算):
print(people[:2])
輸出為:
['Adam','Nick']
2.3 刪除元素
a. pop方法可以返回要刪除的值,可以使用下標進行刪除,或者刪除最后一個元素:a = people.pop(2)或者a = people.pop(),a的值都將是’Tony’,而原列表將會刪除對應的元素。
b. 如果你不需要使用刪除的值,del是一個好辦法:del people[0],則people列表將變為[‘Nick’,’Tony’]。
c. remove方法將刪除列表中第一個所需刪除的元素,如進行test_list.remove(1)操作后,列表將變為test_list = [0,1,’a’,’b’],注意,remove方法不返回任何值。
2.4 列表和字符串
列表和字符串能夠靈活地進行轉換,比如將字符串轉化為列表:
# 將字符串轉化為列表
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'
2.5 列表的別名
這是一個容易出錯的點,下列代碼中,兩個變量是完全一樣的,改變一個,另一個的值也會跟著改變:
# alias是列表name的別名
name = ['Adam', 'is', 'very', 'cool']
alias = name
alias.pop()
print(name)
輸出為:
['Adam', 'is', 'very']
因此,希望使用兩個獨立的列表時,盡量使用單獨的賦值語句或者淺復制:
name = ['Adam', 'is', 'very', 'cool']
# 創建值一樣的列表
name_2 = ['Adam', 'is', 'very', 'cool']
# 淺復制
name_3 = name[:]
2.6 列表參數
元組可以通過*運算符作為參數傳入函數中,列表也可以作為參數輸出到函數中,此時函數會得到列表的一個引用,意味著如果函數中對列表進行了修改,那么原列表也將被修改,示例如下:
#定義一個函數,刪除列表的第一個元素
def del_head(t):
del t[0]
name = ['Adam', 'is', 'very', 'cool']
del_head(name)
print(name)
輸出為:
['is', 'very', 'cool']
參數t和變量name指向同一個列表,因此當t變化時,name也變化了。這個知識點十分重要,在編寫函數時,要非常注意操作是否會創建一個新的列表,還是在原有列表上作變化。
2.7 映射和列表推導式
如果想通過一個函數對列表進行操作,映射(map)和列表推導式是很好的選擇。Python提供的內置函數map接收兩個參數 – 映射函數和迭代對象,返回一個迭代對象,示例如下:
# 返回元素的平方
def square(n):
return n*n
test_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]
3 總結
上述知識基本概括了列表的常見操作,簡單總結一下經驗:
- 大部分列表方法都是修改參數并返回None,一定要注意選擇合適的方法,確保變量的安全性。
- 實現同一種操作有很多種辦法,有時用錯誤的方法不會報錯,但結果有可能不對,確保理解了個中差異后再選擇合適的方法。
- 謹慎使用列表的別名,其實不止列表,其他的數據類型也會有別名的機制。
希望這些知識點對你有幫助,來一道leetcode算法題鞏固一下列表知識吧,歡迎在評論區留下你的答案!下次我們將聊聊字典(Dict)。
題目:旋轉數組
給定一個數組,將數組中的元素向右移動 k 個位置,其中 k 是非負數。示例:
輸入: 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]
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。