這次需要對一個列表中的所有元素加上同一個字符串(如[‘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表達式也被稱為匿名函數,和普通的函數完全一樣,但是沒有def 定義的函數名,適合用於程序中僅使用一次的情況。
下面的示例相當於把變量b
和a
傳遞進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並填充相同的元素,將他們對應位置的元素相加。
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
不能傳遞參數,就不能定義一個全局變量嗎?當然可以!但是在有些情況下不太方便。
就學了這麼多,若有不當之處,可以指出,感激萬分