python的map函數的使用方法詳解以及使用案例(處理每個元素的自增、自減、平方等)


1、用我們之前學過的求一下平方(只有一個列表)

#求平方
num=[1,5,6,2,7,8]
a=[]
for n in num:
    a.append(n**2)
print (a)

C:\python35\python3.exe D:/pyproject/day14函數/map函數.py

[1, 25, 36, 4, 49, 64]

2、寫成函數,這樣在有多個列表的時候只要調用一下這個函數就可以了

num=[1,5,6,2,7,8]
num_1=[22,333,11,55,66]
def map_atest(array):
    ret = []
    for n in array:
        ret.append(n**2)
    return ret
ret=map_atest(num)
ret1=map_atest(num_1)
print (ret)
print(ret1)

C:\python35\python3.exe D:/pyproject/day14函數/map函數.py

[1, 25, 36, 4, 49, 64]

[484, 110889, 121, 3025, 4356]

3、現在需求又變了。要求列表里面的每個數自增加1

num=[1,5,6,2,7,8]
num_1=[22,333,11,55,66]
def add_one(x):#1.定義一個自增1的函數
    return x+1
def add_reduce_one(x):#2.定義一個自減1的函數
    return x-1
def map_atest(func,array):#3.定義一個函數,需要穿2個參數
    ret = []#4.1定義一個空列表
    for n in array:#這個array是num傳進來的列表,做for循環
        res=func(n)#func就是add_one這個函數,傳的值是n,就把n自增加了1   add_one(n),然后賦值給變量
        ret.append(res)
    return ret
print(map_atest(add_one,num))#4.  傳2個參數add_one num 這2個都是函數
print(map_atest(add_one,num_1))

C:\python35\python3.exe D:/pyproject/day14函數/map函數.py

[2, 6, 7, 3, 8, 9]

[23, 334, 12, 56, 67]

我們把自增1和自減1都寫成了函數,這樣在下面一調用函數,把列表傳進去就可以了

num=[1,5,6,2,7,8]
num_1=[22,333,11,55,66]
def add_one(x):#1.定義一個自增1的函數
    return x+1
def add_reduce_one(x):#2.定義一個自減1的函數
    return x-1
def map_atest(func,array):#3.定義一個函數,需要穿2個參數
    ret = []#4.1定義一個空列表
    for n in array:#這個array是num傳進來的列表,做for循環
        res=func(n)#func就是add_one這個函數,傳的值是n,就把n自增加了1   add_one(n),然后賦值給變量
        ret.append(res)
    return ret
print(map_atest(add_reduce_one,num))#4.  傳2個參數add_reduceone num 這2個都是函數
print(map_atest(add_reduce_one,num_1))

C:\python35\python3.exe D:/pyproject/day14函數/map函數.py

[0, 4, 5, 1, 6, 7]

[21, 332, 10, 54, 65]

4、在添加一個求平方的函數

這樣子看起來很靈活了,還不夠好

num=[1,5,6,2,7,8]
num_1=[22,333,11,55,66]
def add_one(x):#1.定義一個自增1的函數
    return x+1
def reduce_one(x):#2.定義一個自減1的函數
    return x-1
def pf_one(x):
    return x**2
def map_atest(func,array):#3.定義一個函數,需要穿2個參數
    ret = []#4.1定義一個空列表
    for n in array:#這個array是num傳進來的列表,做for循環
        res=func(n)#func就是add_one這個函數,傳的值是n,就把n自增加了1   add_one(n),然后賦值給變量
        ret.append(res)
    return ret
print(map_atest(add_one,num))#4.  傳2個參數add_one num 這2個都是函數
print(map_atest(reduce_one,num_1))
print(map_atest(pf_one,num_1))

C:\python35\python3.exe D:/pyproject/day14函數/map函數.py

[2, 6, 7, 3, 8, 9]

[21, 332, 10, 54, 65]

[484, 110889, 121, 3025, 4356]

5、在上面的基礎上,在進行精簡,剛剛學了匿名函數,現在我們就可以用上了

 

def add_one(x):#1.定義一個自增1的函數
    return x+1

這個函數就等於  lambda x:x+1

 

def add_reduce_one(x):#2.定義一個自減1的函數
    return x-1

這個函數等於   lambda x:x-1

 

def pf_one(x):
    return x**2

這個函數等於  lambda x:x**2

然后最后精簡完成就是下面這樣了,用了3個lambda代替了3個函數。代碼更少了

num=[1,5,6,2,7,8]
num_1=[22,333,11,55,66]
def map_atest(func,array):#3.定義一個函數,需要穿2個參數
    ret = []#4.1定義一個空列表
    for n in array:#這個array是num傳進來的列表,做for循環
        res=func(n)#func就是add_one這個函數,傳的值是n,就把n自增加了1   add_one(n),然后賦值給變量
        ret.append(res)
    return ret
print(map_atest(lambda x:x+1,num))#4.  傳2個參數add_one num 這2個都是函數
print(map_atest(lambda x:x-1,num_1))
print(map_atest(lambda x:x**2,num_1))

C:\python35\python3.exe D:/pyproject/day14函數/map函數.py

[2, 6, 7, 3, 8, 9]

[21, 332, 10, 54, 65]

[484, 110889, 121, 3025, 4356]

6、我們來看下map函數的用法,打印出來的是一個內存地址

#我們看下系統內置函數map
print (map(lambda x:x+1,num))

C:\python35\python3.exe D:/pyproject/day14函數/map函數.py

<map object at 0x0000000000A14128>

map處理的一個結果是一個迭代器,只能迭代一次

rec=map(lambda x:x+1,num)
for n in (rec):
    print (n)

C:\python35\python3.exe D:/pyproject/day14函數/map函數.py

[2, 6, 7, 3, 8, 9]

2

6

7

3

8

9
rec=map(lambda x:x+1,num)
# for n in (rec):
#     print (n)
print (list(rec))

C:\python35\python3.exe D:/pyproject/day14函數/map函數.py

[2, 6, 7, 3, 8, 9]

[2, 6, 7, 3, 8, 9]

7、總結map函數的用法,需要傳2個參數,在python內部,就相當於一個for循環,把每次遍歷的那個數字交給這個處理方法

map(一個處理方法,一個可迭代對象)

 

8、map后面不一定用lambda,只用自定義函數也可以的

num=[1,5,6,2,7,8]
def add_one(x):#1.定義一個自增1的函數
    return x+1
print (list(map(add_one,num)))

C:\python35\python3.exe D:/pyproject/day14函數/map函數.py

[2, 6, 7, 3, 8, 9]

9、map函數處理字符串,把字符串都變成大寫

msg="gouguqoi"

list(map(lambda x:x.upper(),msg))

上面的代碼是這樣形成的

第一步

msg="gouguqoi"
map(lambda x:x.upper(),msg)

第二步

msg="gouguqoi"
list(map(lambda x:x.upper(),msg))

 

第三步

msg="gouguqoi"
print (list(map(lambda x:x.upper(),msg)))

10、將列表里面的元素變成字符串的類型

num=[1,5,6,2,7,8]
print(list(map(lambda x:str(x),num)))
print(list(map(str,num)))

['1', '5', '6', '2', '7', '8']

['1', '5', '6', '2', '7', '8']

map總結:

處理序列中的每個元素,得到的結果是一個“列表”(迭代器),該“列表”個數已位置與原來一樣,然后把每個元素依次交給前面的這個處理方法,最后得到一個列表的結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM