Funkcja map() Pythona, wyjaśniona przykładami
Opublikowany: 2022-08-25W tym samouczku dowiesz się, jak używać funkcji map() Pythona, aby zastosować funkcję do wszystkich elementów elementu iteracyjnego.
Python obsługuje paradygmat programowania funkcyjnego, który pozwala programowo definiować zadania jako obliczanie funkcji. Możesz traktować funkcje Pythona jak obiekty: funkcja może przyjąć inną funkcję jako parametr i zwrócić inną funkcję.
Funkcja map()
przyjmuje funkcję jako argument i pozwala zastosować ją do wszystkich elementów w sekwencji.
Pod koniec tego samouczka będziesz mógł używać funkcji map()
Pythona — do przepisywania pełnych pętli i list składanych. Zakodujesz kilka przykładów, aby zrozumieć różne sposoby użycia funkcji map()
.
Jak zastosować funkcję do elementów listy Pythona?

Zacznijmy naszą dyskusję od przykładu.
Tutaj nums
to lista liczb.
nums = [2,4,3,7]
Następnie rozważ funkcję self_pow()
. Funkcja self_pow()
przyjmuje liczbę jako argument i zwraca liczbę podniesioną do potęgi samej liczby: n**n.
W Pythonie operatorem potęgowania jest **. a**b zwraca wartość a podniesioną do potęgi b, a b .
def self_pow(n): return n**n
DO ZROBIENIA : Aby utworzyć nową listę
nums_pow
przez zastosowanie funkcjiself_pow()
do każdego elementu listynums
.
Korzystanie z pętli
Aby to zrobić, możesz użyć pętli for w Pythonie:
- Dla każdej liczby na liście
nums
wywołaj funkcjęself_pow()
znum
jako argumentem. - Dołącz wynik wywołania funkcji do nowej listy
nums_pow
.
nums_pow = [] for num in nums: nums_pow.append(self_pow(num)) print(nums_pow)
Na wyjściu każda liczba nums
jest podnoszona do siebie. Elementy na liście nums_pow
są następujące: 2 2 , 4 4 , 3 3 ,7 7 .
Output [4, 256, 27, 823543]
Korzystanie ze zrozumienia listy
Możesz to zrobić zwięźle, używając rozumienia listy. Z powyższej pętli explicit for możemy zidentyfikować wyrażenie wyjściowe i listę do przejścia.

Następnie możemy zmodyfikować ogólne wyrażenie listowe:
new_list = [<output expression> for item in iterable]
Wyrażenie listowe do generowania listy nums_pow
wygląda następująco:
nums_pow = [self_pow(num) for num in nums] print(nums_pow)
Zgodnie z oczekiwaniami dane wyjściowe są takie same, jak przy użyciu pętli for.
Output [4, 256, 27, 823543]
Zamiast rozumienia pętli i list, możesz użyć funkcji map()
Pythona o zwięzłej składni, która pomaga zastosować tę funkcję do wszystkich elementów w iterowalnym. Zacznijmy od poznania składni funkcji map.
Składnia funkcji map() w Pythonie

Ogólna składnia do używania Funkcja map()
w Pythonie wygląda następująco:
map(function, iterable_1,[iterable_2,...,iterable_n])
Funkcja map()
przyjmuje co najmniej dwa argumenty, funkcję i iterowalną .
W powyższej składni:
- function oznacza funkcję Pythona lub ogólnie dowolną wywoływalną funkcję Pythona. Obejmuje to funkcje zdefiniowane przez użytkownika i wbudowane, klasy, instancje i metody klas oraz wiele innych.
- iterowalny to dowolny poprawny iterowalny Python, taki jak lista, krotka i ciąg znaków.
- Funkcja map() stosuje funkcję do każdego elementu w iterable
Co zwraca funkcja map()?
Zwraca obiekt mapy. Następnie możesz rzutować obiekt map na listę, używając składni: list(map(function,iterable)).
W zależności od przypadku użycia możesz rzutować go na krotkę Pythona.

Teraz, gdy znasz składnię funkcji map()
Pythona, zacznijmy kodować przykłady.
Powinieneś mieć Pythona 3.x do naśladowania wraz z tym samouczkiem. W przeciwnym razie możesz uruchomić fragmenty kodu w internetowym edytorze Python Geekflare.
Jak używać funkcji map() z funkcjami zdefiniowanymi przez użytkownika?

#1 . Wcześniej stosowaliśmy funkcję self_pow()
do każdej liczby na liście nums
. W składni funkcji map()
możemy jako argumenty przekazać funkcję self_pow
i nums
z listy.
Uwaga : Powinieneś określić tylko nazwę funkcji, a nie wywołanie funkcji. Użyj self_pow
a nie self_pow()
.
Funkcja map()
zwraca obiekt mapy.
print(map(self_pow,nums)) <map object at 0x7f7d315c14d0>
Następnie możemy rzutować obiekt mapy na listę za pomocą funkcji list(), jak pokazano poniżej.
nums_pow = list(map(self_pow,nums)) print(nums_pow)
Oto dane wyjściowe, w których każda num
z nums
jest mapowana na num num z listy nums_pow
.
Output [4, 256, 27, 823543]
#2 . Rozważmy następującą funkcję inch_to_cm()
, która konwertuje cale na centymetry. 1 cal = 2,54 cm .
def inch_to_cm(inch): return inch*2.54
Aby przekonwertować wartości cali na liście inches
na centymetry, możesz użyć funkcji map()
, jak pokazano w komórce kodu poniżej.
inches = [5.54,3.4,1,25,8.2] cms = list(map(inch_to_cm,inches)) print(cms)
Lista cms
zawiera wartości w calach wyrażone w centymetrach.
Output [14.0716, 8.636, 2.54, 63.5, 20.828]
Jak używać funkcji map() z funkcjami wbudowanymi?

W tej sekcji dowiemy się, jak używać map()
z wbudowanymi funkcjami w Pythonie.
#1 . List strings
to lista języków programowania. Chcesz utworzyć nową listę strings_upper
zawierającą ciągi języka programowania pisane wielkimi literami.
strings = ['JavaScript','Rust','Python','Go']
Wbudowana metoda łańcuchowa
.upper()
działa na łańcuchu i zwraca kopię sformatowaną wielkimi literami.
strings_upper = list(map(str.upper,strings)) print(strings_upper)
Lista strings_upper
zawiera ciągi w strings
list sformatowanych wielkimi literami.
Output ['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']
#2 . Wbudowana funkcja len()
w Pythonie przyjmuje sekwencję jako argument i zwraca jej długość. Aby znaleźć długość każdego z ciągów na liście strings
, możemy użyć funkcji map()
i zastosować funkcję length do każdego ciągu, jak pokazano poniżej.
strings_len = list(map(len,strings)) print(strings_len)
Output [10, 4, 6, 2]
#3 . Możesz użyć funkcji map()
z innymi kolekcjami, takimi jak krotki.
Poniższy przykład zawiera krotkę zawierającą informacje o liczbie sypialni, powierzchni i mieście, w którym znajduje się dom.

W Pythonie funkcja type()
zwraca typ danych dowolnego obiektu Pythona. Aby uzyskać typ danych wszystkich elementów w tej krotce, możesz użyć funkcji map()
, aby wywołać funkcję type
na każdym elemencie krotki.
house = (2,758.5,'Bangalore') house_elt_type = tuple(map(type,house)) print(house_elt_type)
Wrzuciliśmy obiekt mapy do krotki. Możesz także przesyłać na listę lub dowolną inną kolekcję.
W poniższym wyniku widzimy, że typy danych 2, 758,5 i Bangalore zostały wywnioskowane jako odpowiednio 'int', 'float' i 'str'.
Output (<class 'int'>, <class 'float'>, <class 'str'>)
#4 . W Pythonie możesz importować wbudowane moduły i używać funkcji zdefiniowanych w modułach.
Aby obliczyć pierwiastek kwadratowy z każdej liczby na liście nums
, możesz użyć funkcji pierwiastka kwadratowego sqrt
z modułu math.
import math nums = [30,90,34,45,97] nums_sqrt = list(map(math.sqrt,nums)) print(nums_sqrt)
Output [5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]
Powyższe dane wyjściowe są trudne do przeanalizowania i śledzenia. Możesz chcieć zaokrąglić każdą wartość pierwiastka kwadratowego, aby powiedzieć dwa miejsca po przecinku.
Jak zaokrąglić liczbę zmiennoprzecinkową w Pythonie?
Zdefiniujmy funkcję round_2()
, która pobiera wartość zmiennoprzecinkową i zaokrągla ją do dwóch miejsc po przecinku.
def round_2(num): return round(num,2)
Teraz możesz użyć funkcji map()
z round_2
i nums_sqrt
.
nums_sqrt_round = list(map(round_2,nums_sqrt)) print(nums_sqrt_round)
Output [5.48, 9.49, 5.83, 6.71, 9.85]
Można również użyć zagnieżdżonych funkcji map()
, w których wewnętrzna funkcja map jest używana do obliczania list nums_sqrt
, a zewnętrzna funkcja map wykonuje operację zaokrąglania.
nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums)))) print(nums_sqrt_round)
Output [5.48, 9.49, 5.83, 6.71, 9.85]
Wyniki są identyczne w obu powyższych podejściach. Należy jednak upewnić się, że kod jest czytelny i możliwy do utrzymania podczas zagnieżdżania funkcji, jak pokazano powyżej.
Jak używać funkcji map() z funkcjami lambda

W poprzednich rozdziałach nauczyłeś się używać funkcji map()
Pythona z funkcjami wbudowanymi i zdefiniowanymi przez użytkownika. Dowiesz się teraz, jak używać funkcji map() z funkcjami lambda, które w Pythonie są anonimowe.
Czasami będziesz mieć funkcję, której ciało zawiera tylko jeden wiersz kodu i możesz potrzebować użyć funkcji tylko raz i nie odwoływać się do niej w innym miejscu programu. Możesz zdefiniować takie funkcje jako funkcję lambda w Pythonie.
Uwaga :
lambda args: expression
jest ogólną składnią do użycia funkcji lambda Pythona.
#1 . Rozważmy następujące strings
listy. Załóżmy, że chcesz uzyskać listę strings_rev
– zawierającą odwróconą kopię każdego z ciągów.
strings = ['JavaScript','Rust','Python','Go']
Możemy odwrócić napis w Pythonie za pomocą krojenia napisów.
Uwaga : Jest to uogólnienie wyrażenia dzielenia ciągów
str[start:stop:step]
.– Bez wartości
start
i końcowej wycinek zaczyna się na początku ciągu i rozciąga się dostop
ciągu.
– Ujemne wartościstep
dają plastry zaczynając od końca ciągu.
– Dlategostr[::-1]
zwraca odwróconą kopię str.
Możesz użyć tej funkcji lambda: lambda x:x[::-1]
Wewnątrz funkcji mapy, jak pokazano poniżej.
strings_rev = list(map(lambda x:x[::-1],strings)) print(strings_rev)
Podobnie jak w innych przykładach, rzutujemy obiekt mapy na listę. Na wyjściu widzimy, że każdy z ciągów w ciągach listy został odwrócony.
Output ['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']
#2 . W poprzedniej sekcji obliczyliśmy pierwiastek kwadratowy z każdej liczby na liście liczb, a następnie zaokrągliliśmy każdą wartość pierwiastka kwadratowego do dwóch miejsc po przecinku.
W tym celu użyliśmy funkcji round_2()
. Przepiszmy funkcję round_2()
jako funkcję lambda i użyjmy jej z funkcją map()
opisaną poniżej.
nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt)) print(nums_sqrt_round_l)
Jak widać poniżej, dane wyjściowe są identyczne z tymi, które uzyskaliśmy za pomocą funkcji round_2()
.
Output [5.48, 9.49, 5.83, 6.71, 9.85]
Jak używać funkcji map() z wieloma elementami iteracyjnymi?

W przykładach, które widzieliśmy, zastosowaliśmy funkcję na wszystkich elementach dokładnie jednej iteracji.
Czasami możemy mieć funkcje, które przyjmują dwa lub więcej argumentów. W takim przypadku każdy argument jest przechowywany na liście lub w dowolnej podobnej kolekcji.
Możemy również użyć funkcji map() Pythona z wieloma listami.
#1 . Rozważmy następującą funkcję area()
, która przyjmuje length
i breadth
jako dane wejściowe i zwraca obszar length*breadth
.
def area(length,breadth): return length*breadth
Długość i szerokość różnych prostokątów są przechowywane na dwóch oddzielnych listach, odpowiednio lengths
i breadths
.
lengths = [4,8,10,18] breadths = [9,4,6,11]
Możemy użyć funkcji map()
, aby zastosować funkcję area na powyższych listach, przekazując zarówno listy lengths
, jak i breadths
.
areas = list(map(area,lengths,breadths)) print(areas)
Ponieważ obszar funkcji przyjmuje dwa argumenty, wartości length i width są używane odpowiednio z list lengths
breadths
.
Output [36, 32, 60, 198]
#2 . Moduł matematyczny Pythona ma funkcję log, która pomaga nam obliczyć logarytm liczby do dowolnej podstawy.
Uwaga : log(x, base) zwraca wartość log x do podstawy określonej przez wartość base , log base x . Jeśli podstawa nie jest określona, domyślną wartością podstawy jest e (log oblicza logarytm naturalny).
W tym przykładzie:
- Lista
x
odpowiada wartościom, dla których chcesz obliczyć logarytm. - Lista
base
zawiera wszystkie wartości bazowe, które mają być użyte w obliczeniach logarytmicznych.
x = [2,6,12,10] base = [2,3,2,5]
Możemy użyć funkcji map() Pythona z math.log
, listami, x
i base
, aby uzyskać nową listę log_x
, w następujący sposób.
log_x = list(map(math.log,x,base)) print(log_x)
Oto wynik.
Output [1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]
Wniosek
Oto podsumowanie tego, czego nauczyłeś się w tym samouczku:
- Funkcja map() Pythona przyjmuje co najmniej dwa argumenty: funkcję i iterowalną, ze składnią map(function, iterable(s)) .
- Funkcja może być dowolną poprawną wywoływalną w Pythonie.
- Gdy funkcja przyjmuje k argumentów, użyj funkcji
map()
z funkcją i każdym k argumentów w iteracji.
Następnie naucz się pracować z zestawami w Pythonie.