程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python map()函數 實現對列表中每個元素做相同的處理 (傳遞多個參數)(高效率運行)

編輯:Python

這次需要對一個列表中的所有元素加上同一個字符串(如[‘1’, ‘2’, ‘3’, …] --> [‘s1’, ‘s2’, ‘s3’, …]),用for循環可以實現,但是感覺不那麼優雅,猜想python肯定有更高效的方法實現這個操作。探索發現,雖然沒有直接的函數或者語法實現,但可以通過map()函數間接實現,效率上也高了很多。
在這之前很少使用map函數。


語法

map()函數是python的內置函數
語法:map(function, iterable, …)
參數: function – 函數;iterable – 序列
返回: 迭代器。返回結果是個map對象,可使用list()轉為列表類型,但需要注意轉為列表後生成的列表是新列表(不改變原列表),需要賦值給一個新的列表變量!

語法參考:https://www.runoob.com/python/python-func-map.html

基本示例

test_list = ['1', '2', '3']
def y(x): # 函數中可以對x進行任意操作,然後返回一個值
return 's' + x
list2 = list(map(y, test_list))
print(list2)
# 輸出結果為:['s1', 's2', 's3']
''' # 用for循環實現如下: test_list = ['1', '2', '3'] list3 = [] for i in test_list: list3.append('s' + i) print(list3) '''

函數中可以對x進行任意操作,然後返回一個值。但是map(y, test_list)中的y並不能給函數傳遞參數(個人猜想),如定義函數def y(x, str):,但不能使用map(y(str), test_list)。因此尋找了另外兩個辦法,實現傳遞多參數的效果。詳看下文。

更多基本用法示例可參考:
https://blog.csdn.net/quanlingtu1272/article/details/95482253

傳遞多參數示例

方法一、使用lambda表達式(推薦)

lambda表達式也被稱為匿名函數,和普通的函數完全一樣,但是沒有def 定義的函數名,適合用於程序中僅使用一次的情況。
下面的示例相當於把變量ba傳遞進lambda函數中了。

test_list = ['1', '2', '3']
a = 'v'
b = 's'
list2 = list(map(lambda x: a + b, test_list))
print(list2)
# 輸出結果為:['vs1', 'vs2', 'vs3']

lambda表達式可參考:https://blog.csdn.net/answer3lin/article/details/86352009
map()+lambda參考:https://blog.csdn.net/qq_44214671/article/details/110144525

方法二、創造等長的list

創造一個等長的list並填充相同的元素,將他們對應位置的元素相加。

test_list = ['1', '2', '3']
def y(a, b, c):
return a + b + c
a = ['v'] * len(test_list)
b = ['s'] * len(test_list)
list2 = list(map(y, a, b, test_list))
print(list2)
# 輸出結果為:['vs1', 'vs2', 'vs3']

兩個等長list的各對應位置元素相加可參考:
https://blog.csdn.net/weixin_42782150/article/details/124746314
創建list並填充相同的元素可參考:
https://blog.csdn.net/sunxmwebstudy/article/details/111414278
如果列表長度不相等,運行結果會怎樣?參考(其中的“示例代碼4”):
https://blog.csdn.net/weixin_44799217/article/details/119799110

結束語

相對for循環 為什麼要用map函數
當然map效率更高啦,如果有人做了實驗,可以評論區分享一下效率對比結果

在“基本示例”中,函數y不能傳遞參數,就不能定義一個全局變量嗎?當然可以!但是在有些情況下不太方便。

就學了這麼多,若有不當之處,可以指出,感激萬分


  1. 上一篇文章:
  2. 下一篇文章:
相關文章
    没有相关文章
Copyright © 程式師世界 All Rights Reserved