Λειτουργία Python map(), Επεξήγηση με Παραδείγματα

Σε αυτό το σεμινάριο, θα μάθετε πώς να χρησιμοποιείτε τη συνάρτηση Python map() για να εφαρμόσετε μια συνάρτηση σε όλα τα στοιχεία ενός iterable.

Η Python υποστηρίζει το παράδειγμα λειτουργικού προγραμματισμού που σας επιτρέπει να ορίσετε εργασίες ως υπολογισμό συναρτήσεων μέσω προγραμματισμού. Μπορείτε να αντιμετωπίσετε τις συναρτήσεις Python ως αντικείμενα: μια συνάρτηση μπορεί να λάβει μια άλλη συνάρτηση ως παράμετρο και να επιστρέψει μια άλλη συνάρτηση.

Η συνάρτηση map() λαμβάνει μια συνάρτηση ως όρισμα και σας επιτρέπει να την εφαρμόσετε σε όλα τα στοιχεία σε μια ακολουθία.

Μέχρι το τέλος αυτού του σεμιναρίου, θα μπορείτε να χρησιμοποιήσετε τη συνάρτηση Python map() — για να ξαναγράψετε αναλυτικούς βρόχους και κατανοήσεις λίστας. Θα κωδικοποιήσετε πολλά παραδείγματα για να κατανοήσετε τους διαφορετικούς τρόπους με τους οποίους μπορείτε να χρησιμοποιήσετε τη συνάρτηση map().

Πώς να εφαρμόσετε μια συνάρτηση σε στοιχεία μιας λίστας Python

Ας ξεκινήσουμε τη συζήτησή μας με ένα παράδειγμα.👩‍🏫

Εδώ το nums είναι μια λίστα αριθμών.

nums = [2,4,3,7]

Στη συνέχεια, εξετάστε τη συνάρτηση self_pow(). Η συνάρτηση self_pow() παίρνει έναν αριθμό ως όρισμα και επιστρέφει τον αριθμό που αυξήθηκε στη δύναμη του ίδιου του αριθμού: n**n.

Στην Python, ο ** είναι ο τελεστής εκθέσεως. Το a**b επιστρέφει την τιμή του a αυξημένη στην ισχύ b, ab.

def self_pow(n):
  return n**n

TO-DO: Για να δημιουργήσετε μια νέα λίστα nums_pow εφαρμόζοντας τη συνάρτηση self_pow() σε κάθε στοιχείο στη λίστα nums.

Χρήση για βρόχο

Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε βρόχους for στην Python:

  • Για κάθε αριθμό στη λίστα nums, καλέστε τη συνάρτηση self_pow() με το num ως όρισμα.
  • Προσθέστε το αποτέλεσμα της κλήσης συνάρτησης στη νέα λίστα nums_pow.
nums_pow = []

for num in nums:
  nums_pow.append(self_pow(num))

print(nums_pow)

Στην έξοδο, κάθε αριθμός nums αυξάνεται στον εαυτό του. Τα στοιχεία στη λίστα nums_pow είναι τα εξής: 22, 44, 33,77.

Output
[4, 256, 27, 823543]

Χρήση της κατανόησης λίστας

Μπορείτε να το κάνετε αυτό συνοπτικό χρησιμοποιώντας την κατανόηση λίστας. Από τον ρητό βρόχο for παραπάνω, μπορούμε να προσδιορίσουμε την έκφραση εξόδου και τη λίστα προς βρόχο.

Στη συνέχεια, μπορούμε να τροποποιήσουμε τη γενική έκφραση κατανόησης λίστας:

new_list = [<output expression> for item in iterable]

Η έκφραση κατανόησης λίστας για τη δημιουργία της λίστας nums_pow είναι η εξής:

nums_pow = [self_pow(num) for num in nums]
print(nums_pow)

Η έξοδος είναι η ίδια με αυτή από τη χρήση βρόχων for, όπως αναμένεται.

Output
[4, 256, 27, 823543]

Αντί για κατανόηση βρόχου και λίστας, μπορείτε να χρησιμοποιήσετε τη συνάρτηση Python map() με μια συνοπτική σύνταξη και βοηθά στην εφαρμογή της συνάρτησης σε όλα τα στοιχεία ενός επαναληπτικού. Ας ξεκινήσουμε μαθαίνοντας τη σύνταξη της συνάρτησης χάρτη.

  Πώς να διορθώσετε το Adobe Photoshop CC, εάν συντρίβεται ή είναι αργό

Python map() Σύνταξη συνάρτησης

Η γενική σύνταξη για τη χρήση της συνάρτησης Python map() είναι η εξής:

map(function, iterable_1,[iterable_2,...,iterable_n])

Η συνάρτηση map() περιλαμβάνει τουλάχιστον δύο ορίσματα, μια συνάρτηση και ένα επαναληπτικό.

Στην παραπάνω σύνταξη:

  • Η συνάρτηση υποδηλώνει μια συνάρτηση Python ή γενικά, οποιαδήποτε Python μπορεί να κληθεί. Αυτό περιλαμβάνει συναρτήσεις που ορίζονται από τον χρήστη και ενσωματωμένες, κλάσεις, μεθόδους παρουσίας και κλάσεων και πολλά άλλα.
  • iterable είναι κάθε έγκυρο επαναληπτικό Python, όπως λίστα, πλειάδα και συμβολοσειρά.
  • Η συνάρτηση map() εφαρμόζεται και η συνάρτηση χρησιμοποιείται σε κάθε στοιχείο του iterable.

Τι επιστρέφει η συνάρτηση map();

Επιστρέφει ένα αντικείμενο χάρτη. Στη συνέχεια, μπορείτε να μεταφέρετε το αντικείμενο χάρτη σε μια λίστα χρησιμοποιώντας τη σύνταξη: list(map(function,iterable)).

Ανάλογα με την περίπτωση χρήσης, μπορείτε να το ρίξετε σε μια πλειάδα Python.

Τώρα που μάθατε τη σύνταξη της συνάρτησης Python map(), ας ξεκινήσουμε την κωδικοποίηση παραδειγμάτων.

Θα πρέπει να έχετε Python 3.x για να ακολουθήσετε μαζί με αυτό το σεμινάριο. Διαφορετικά, μπορείτε να εκτελέσετε τα αποσπάσματα κώδικα στον διαδικτυακό επεξεργαστή Python grtechpc.org.

Πώς να χρησιμοποιήσετε τη συνάρτηση map() με συναρτήσεις που καθορίζονται από το χρήστη

#1. Προηγουμένως, είχαμε εφαρμόσει τη συνάρτηση self_pow() σε κάθε αριθμό στη λίστα nums. Στη σύνταξη για τη συνάρτηση map(), μπορούμε να περάσουμε τη συνάρτηση self_pow και τη λίστα nums ως ορίσματα.

Σημείωση: Θα πρέπει να καθορίσετε μόνο το όνομα της συνάρτησης και όχι μια κλήση συνάρτησης. Χρησιμοποιήστε self_pow και όχι self_pow().

Η συνάρτηση map() επιστρέφει ένα αντικείμενο χάρτη.

print(map(self_pow,nums))

<map object at 0x7f7d315c14d0>

Στη συνέχεια, μπορούμε να μεταφέρουμε το αντικείμενο χάρτη σε μια λίστα χρησιμοποιώντας τη συνάρτηση list(), όπως φαίνεται παρακάτω.

nums_pow = list(map(self_pow,nums))
print(nums_pow)

Εδώ είναι η έξοδος όπου κάθε num in nums αντιστοιχίζεται σε numnum στη λίστα nums_pow.

Output
[4, 256, 27, 823543]

#2. Θεωρήστε την ακόλουθη συνάρτηση inch_to_cm() που μετατρέπει τις ίντσες σε εκατοστά. 1 ίντσα = 2,54 cm.

def inch_to_cm(inch):
  return inch*2.54

Για να μετατρέψετε τις τιμές ιντσών στη λίστα ιντσών σε εκατοστά, μπορείτε να χρησιμοποιήσετε τη συνάρτηση map() όπως φαίνεται στο κελί κώδικα παρακάτω.

inches = [5.54,3.4,1,25,8.2]
cms = list(map(inch_to_cm,inches))
print(cms)

Η λίστα cms περιέχει τις τιμές της ίντσας που εκφράζονται σε εκατοστά.

Output
[14.0716, 8.636, 2.54, 63.5, 20.828]

Πώς να χρησιμοποιήσετε τη συνάρτηση map() με ενσωματωμένες συναρτήσεις

Σε αυτήν την ενότητα, θα μάθουμε πώς να χρησιμοποιούμε τη map() με ενσωματωμένες συναρτήσεις στην Python.

#1. Οι συμβολοσειρές λίστας είναι μια λίστα γλωσσών προγραμματισμού. Θα θέλατε να δημιουργήσετε μια νέα λίστα strings_upper που περιέχει τις συμβολοσειρές της γλώσσας προγραμματισμού με κεφαλαία.

strings = ['JavaScript','Rust','Python','Go']

Η ενσωματωμένη μέθοδος συμβολοσειράς .upper() ενεργεί σε μια συμβολοσειρά και επιστρέφει ένα αντίγραφο μορφοποιημένο με κεφαλαία.

strings_upper = list(map(str.upper,strings)) 
print(strings_upper)

Η λίστα strings_upper περιλαμβάνει συμβολοσειρές στις συμβολοσειρές της λίστας μορφοποιημένες με κεφαλαία.

Output
['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2. Η ενσωματωμένη συνάρτηση len() στην Python παίρνει μια ακολουθία ως όρισμα και επιστρέφει το μήκος της. Για να βρούμε το μήκος καθεμιάς από τις συμβολοσειρές στη λίστα συμβολοσειρών, μπορούμε να χρησιμοποιήσουμε τη συνάρτηση map() και να εφαρμόσουμε τη συνάρτηση μήκους σε κάθε συμβολοσειρά, όπως φαίνεται παρακάτω.

strings_len = list(map(len,strings))
print(strings_len)
Output
[10, 4, 6, 2]

#3. Μπορείτε να χρησιμοποιήσετε τη συνάρτηση map() με άλλες συλλογές όπως πλειάδες.

  Πώς να διαγράψετε ένα αρχείο που είναι ανοιχτό σε άλλο πρόγραμμα

Το παρακάτω παράδειγμα περιέχει μια πλειάδα που περιέχει πληροφορίες για τον αριθμό των υπνοδωματίων, την περιοχή και την πόλη στην οποία βρίσκεται ένα σπίτι.

Στην Python, η συνάρτηση type() επιστρέφει τον τύπο δεδομένων οποιουδήποτε αντικειμένου Python. Για να λάβετε τον τύπο δεδομένων όλων των στοιχείων σε αυτήν την πλειάδα, μπορείτε να χρησιμοποιήσετε τη συνάρτηση map() για να καλέσετε τη συνάρτηση τύπου σε κάθε στοιχείο πλειάδας.

house = (2,758.5,'Bangalore')
house_elt_type = tuple(map(type,house))
print(house_elt_type)

Έχουμε ρίξει το αντικείμενο του χάρτη σε μια πλειάδα. Μπορείτε επίσης να κάνετε cast σε μια λίστα ή σε οποιαδήποτε άλλη συλλογή.

Στην παρακάτω έξοδο, βλέπουμε ότι οι τύποι δεδομένων 2, 758.5 ​​και Bangalore έχουν συναχθεί ως ‘int’, ‘float’ και ‘str’, αντίστοιχα.

Output
(<class 'int'>, <class 'float'>, <class 'str'>)

#4. Στην Python, μπορείτε να εισάγετε ενσωματωμένες μονάδες και να χρησιμοποιήσετε τις συναρτήσεις που ορίζονται στις λειτουργικές μονάδες.

Για να υπολογίσετε την τετραγωνική ρίζα κάθε αριθμού στη λίστα nums, μπορείτε να χρησιμοποιήσετε τη συνάρτηση τετραγωνικής ρίζας sqrt από την ενότητα μαθηματικών.

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]

Η παραπάνω έξοδος είναι δύσκολο να αναλυθεί και να ακολουθηθεί. Μπορεί να θέλετε να στρογγυλοποιήσετε κάθε τιμή τετραγωνικής ρίζας για να πείτε δύο δεκαδικά ψηφία.

Πώς να στρογγυλοποιήσετε έναν αριθμό κινητής υποδιαστολής στην Python

Ας ορίσουμε μια συνάρτηση round_2() που παίρνει μια τιμή κινητής υποδιαστολής και τη στρογγυλοποιεί σε δύο δεκαδικά ψηφία.

def round_2(num):
  return round(num,2)

Τώρα, μπορείτε να χρησιμοποιήσετε τη συνάρτηση map() με τη λίστα round_2 και 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]

Μπορείτε επίσης να χρησιμοποιήσετε τις ένθετες συναρτήσεις map(), όπου η συνάρτηση εσωτερικού χάρτη χρησιμοποιείται για τον υπολογισμό της λίστας τετραγωνικών ριζών nums_sqrt και η συνάρτηση εξωτερικού χάρτη εκτελεί τη λειτουργία στρογγυλοποίησης.

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]

Τα αποτελέσματα είναι πανομοιότυπα και στις δύο παραπάνω προσεγγίσεις. Ωστόσο, θα πρέπει να βεβαιωθείτε ότι ο κώδικας είναι αναγνώσιμος και διατηρήσιμος κατά την ένθεση συναρτήσεων όπως φαίνεται παραπάνω.

Πώς να χρησιμοποιήσετε τη συνάρτηση map() με συναρτήσεις λάμδα

Στις προηγούμενες ενότητες, μάθατε πώς να χρησιμοποιείτε τη συνάρτηση Python map() με ενσωματωμένες και καθορισμένες από το χρήστη συναρτήσεις. Τώρα θα μάθετε πώς να χρησιμοποιείτε τη συνάρτηση map() με συναρτήσεις λάμδα, οι οποίες είναι ανώνυμες στην Python.

Μερικές φορές, θα έχετε μια συνάρτηση της οποίας το σώμα περιέχει μόνο μία γραμμή κώδικα και μπορεί να χρειαστεί να χρησιμοποιήσετε τη συνάρτηση μόνο μία φορά και να μην την αναφέρετε αλλού στο πρόγραμμα. Μπορείτε να ορίσετε τέτοιες συναρτήσεις ως συνάρτηση λάμδα στην Python.

Σημείωση: lambda args: έκφραση είναι η γενική σύνταξη για τη χρήση μιας συνάρτησης Python lambda.

#1. Εξετάστε τις ακόλουθες συμβολοσειρές λίστας. Ας υποθέσουμε ότι θέλετε να λάβετε μια λίστα strings_rev – που περιέχει ένα αντίστροφο αντίγραφο καθεμιάς από τις συμβολοσειρές.

strings = ['JavaScript','Rust','Python','Go']

Μπορούμε να αντιστρέψουμε μια συμβολοσειρά Python χρησιμοποιώντας κοπή συμβολοσειράς.

  Λάβετε μόνο πρόσφατες ειδήσεις και άρθρα στην Αναζήτηση Google ορίζοντας ένα εύρος ημερομηνιών

Σημείωση: Αυτή είναι μια γενίκευση της έκφρασης κοπής συμβολοσειράς str[start:stop:step].

– Χωρίς τις τιμές έναρξης και διακοπής, η φέτα ξεκινά από την αρχή της συμβολοσειράς και εκτείνεται μέχρι το τέλος της συμβολοσειράς.
– Οι αρνητικές τιμές του βήματος δίνει φέτες που ξεκινούν από το τέλος της χορδής.
– Επομένως, η στρ[::-1] επιστρέφει ένα αντίστροφο αντίγραφο του str.

Μπορείτε να χρησιμοποιήσετε αυτήν τη συνάρτηση λάμδα: λάμδα x:x[::-1]Μέσα στη λειτουργία χάρτη, όπως φαίνεται παρακάτω.

strings_rev = list(map(lambda x:x[::-1],strings))
print(strings_rev)

Όπως και με άλλα παραδείγματα, ρίχνουμε το αντικείμενο του χάρτη σε μια λίστα. Στην έξοδο, βλέπουμε ότι κάθε μία από τις συμβολοσειρές στις συμβολοσειρές της λίστας έχει αντιστραφεί.

Output
['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2. Στην προηγούμενη ενότητα, υπολογίσαμε την τετραγωνική ρίζα κάθε αριθμού στη λίστα αριθμών και στη συνέχεια στρογγυλοποιήσαμε κάθε τιμή τετραγωνικής ρίζας σε δύο δεκαδικά ψηφία.

Χρησιμοποιήσαμε τη συνάρτηση round_2() για να το κάνουμε αυτό. Ας ξαναγράψουμε τη συνάρτηση round_2() ως συνάρτηση λάμδα και ας τη χρησιμοποιήσουμε με τη συνάρτηση map() που περιγράφεται παρακάτω.

nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt))
print(nums_sqrt_round_l)

Όπως φαίνεται παρακάτω, η έξοδος είναι πανομοιότυπη με αυτή που λάβαμε χρησιμοποιώντας τη συνάρτηση round_2().

Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Πώς να χρησιμοποιήσετε τη συνάρτηση map() με πολλαπλούς επαναληπτικούς

Στα παραδείγματα που είδαμε, εφαρμόσαμε μια συνάρτηση σε όλα τα στοιχεία ενός ακριβώς επαναληπτικού.

Μερικές φορές, μπορεί να έχουμε συναρτήσεις που λαμβάνουν δύο ή περισσότερα ορίσματα. Σε αυτήν την περίπτωση, κάθε όρισμα αποθηκεύεται σε μια λίστα ή σε οποιαδήποτε παρόμοια συλλογή.

Μπορούμε επίσης να χρησιμοποιήσουμε τη συνάρτηση Python map() με πολλαπλές λίστες.

#1. Θεωρήστε την ακόλουθη συνάρτηση area() που δέχεται το μήκος και το πλάτος ως είσοδο και επιστρέφει την περιοχή, μήκος*πλάτος.

def area(length,breadth):
  return length*breadth

Το μήκος και το πλάτος διαφορετικών ορθογωνίων αποθηκεύονται σε δύο ξεχωριστές λίστες, μήκη και πλάτη, αντίστοιχα.

lengths = [4,8,10,18]
breadths = [9,4,6,11]

Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση map() για να εφαρμόσουμε τη συνάρτηση περιοχής στις παραπάνω λίστες περνώντας και τις δύο λίστες μήκη και πλάτη.

areas = list(map(area,lengths,breadths))
print(areas)

Επειδή η περιοχή συνάρτησης δέχεται δύο ορίσματα, οι τιμές μήκους και πλάτους χρησιμοποιούνται από τις λίστες μήκη πλάτη, αντίστοιχα.

Output
[36, 32, 60, 198]

#2. Η μαθηματική ενότητα Python έχει τη συνάρτηση καταγραφής που μας βοηθά να υπολογίσουμε τον λογάριθμο ενός αριθμού σε οποιαδήποτε βάση.

Σημείωση: το log(x, βάση) επιστρέφει την τιμή του log x στη βάση που καθορίζεται από τη βάση τιμών, τη βάση καταγραφής x. Εάν η βάση δεν έχει καθοριστεί, η προεπιλεγμένη τιμή βάσης είναι e (το log υπολογίζει τον φυσικό λογάριθμο).

Σε αυτό το παράδειγμα:

  • Η λίστα x αντιστοιχεί στις τιμές για τις οποίες θέλετε να υπολογίσετε τον λογάριθμο.
  • Η βασική λίστα περιέχει όλες τις βασικές τιμές που θα χρησιμοποιηθούν στον υπολογισμό του λογαρίθμου.
x = [2,6,12,10]
base = [2,3,2,5]

Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση Python map() με το math.log, τις λίστες, το x και τη βάση για να λάβουμε τη νέα λίστα log_x, ως εξής.

log_x = list(map(math.log,x,base))
print(log_x)

Εδώ είναι η έξοδος.

Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

συμπέρασμα

Ακολουθεί μια περίληψη των όσων μάθατε σε αυτό το σεμινάριο:

  • Η συνάρτηση Python map() λαμβάνει τουλάχιστον δύο ορίσματα: μια συνάρτηση και ένα iterable, με το συντακτικό map(function, iterable(s)).
  • Η συνάρτηση μπορεί να είναι οποιαδήποτε έγκυρη Python καλούμενη.
  • Όταν η συνάρτηση δέχεται k ορίσματα, χρησιμοποιήστε τη συνάρτηση map() με τη συνάρτηση και καθένα από τα k ορίσματα σε έναν επαναληπτικό.

Στη συνέχεια, μάθετε να εργάζεστε με σύνολα στην Python.