Python列表常用操作小技巧「python中map函數的用法」

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]


原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/275127.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:19
下一篇 2024-12-17 14:19

相關推薦

發表回復

登錄後才能評論