Jak korzystać z funkcji map() w Pythonie

Dowiedz się, jak używać funkcji map() języka Python. Opanuj stosowanie funkcji do iteracji bez pisania pętli i porównuj mapę ze wyrażeniami listowymi.

Wypróbuj to rozwiązanie w Edytorze

Przegląd

Podczas przetwarzania zbiorów danych często trzeba będzie zastosować określoną transformację do każdego pojedynczego elementu w iterowalnym obiekcie. Na przykład konwersja listy numerów ciągów na liczby całkowite lub normalizowanie tablicy ciągów w bazie danych poprzez konwersję ich na małe litery. Zamiast pisać szczegółowe pętle „for”, Python udostępnia wbudowane narzędzie o nazwie „map()”.

Funkcja `map(funkcja, iterowalna)` przyjmuje jako argumenty funkcję transformacji i wartość iterowalną. Stosuje tę funkcję do każdego elementu iterowalnego obiektu i zwraca obiekt iteratora (obiekt „map”). Ponieważ jest zwracany jako iterator, obliczenia są wykonywane leniwie: elementy są przetwarzane tylko podczas iteracji po nich, co oszczędza pamięć w przypadku dużych zbiorów danych.

Aby natychmiast uzyskać reprezentację listową obiektu mapy, należy rzucić wynik za pomocą konstruktora `list()`: `list(map(func, data))`. Możesz przekazać dowolną standardową funkcję, standardową funkcję biblioteczną (taką jak `str` lub `len`) lub niestandardowe funkcje anonimowe zadeklarowane za pomocą słowa kluczowego `lambda` bezpośrednio do `map()` w celu wykonania wbudowanego.

Dane wyjściowe kodu i wykonania

Ten skrypt demonstruje modyfikowanie kolekcji przy użyciu funkcji map() z transformacjami ciągów, mapowaniem elementów listy na liczby i używaniem wywołań zwrotnych lambda.

map_function.py
Spróbuj w Edytorze
# 1. Map string conversion over a list of numbers
numbers = [1, 2, 3, 4]
string_numbers = list(map(str, numbers))
print("Mapped to strings:", string_numbers)

# 2. Square numbers using a lambda function inside map()
squared = list(map(lambda x: x**2, numbers))
print("Squared numbers:", squared)

# 3. Apply custom logic function to items
def normalize_name(name):
    return name.strip().capitalize()

names = ["  alice", "BOB  ", " charlie "]
clean_names = list(map(normalize_name, names))
print("Clean names list:", clean_names)
Wyjście terminala
Mapped to strings: ['1', '2', '3', '4']
Squared numbers: [1, 4, 9, 16]
Clean names list: ['Alice', 'Bob', 'Charlie']

Wdrażanie krok po kroku

  • Zidentyfikuj funkcję transformacji, którą chcesz zastosować do każdego elementu w kolekcji.
  • Wywołaj map(function_name, iterable), aby utworzyć leniwy iterator przekształconych elementów.
  • Zawiń wywołanie map() wewnątrz list(), jeśli chcesz natychmiast uzyskać dostęp do wszystkich elementów w postaci standardowej listy.
  • Połącz map() z funkcjami lambda, aby uzyskać szybkie, jednorazowe transformacje wbudowane.

Często zadawane pytania

Czy map() jest lepsza od wyrażeń listowych?

Społeczność ogólnie uważa, że wyrażenia listowe są bardziej czytelne i oparte na języku Python. Jednakże map() może działać szybciej, jeśli zastosuje się istniejącą funkcję wbudowaną (np. map(str, list)), ponieważ uruchamia ona zoptymalizowane pętle kodu C.

Czy map() może przyjmować wiele iteracji?

Tak! Jeśli funkcja transformacji przyjmuje wiele argumentów, możesz przekazać wiele iteracji do map(). Na przykład map(lambda x, y: x + y, lista1, lista2) doda elementy parami.

Powiązane tematy

Polecane zasoby Pythona

Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.