Je lis à travers le Python documentation pour entrer vraiment en profondeur avec le Python Langue et rencontré les fonctions du filtre et de la carte. J'ai déjà utilisé le filtre avant, Mais ne jamais mapper, même si j'ai vu les deux dans diverses Python questions ici à ce sujet.
Après avoir lu sur eux dans le Python Didacticiel, je suis confondu sur la différence entre les deux. Par exemple, de 5.1.3. Outils de programmation fonctionnels :
>>> def f(x): return x % 2 != 0 and x % 3 != 0
...
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]
et
>>> def cube(x): return x*x*x
...
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
Celles-ci ressemblaient presque exactement la même chose en fonction de moi, alors je suis allé dans le terminal pour courir Python de manière interactive et testé mon propre cas. J'ai utilisé map
pour les première et seconde instances ci-dessus, et pour le premier (return x % 2 != 0 and x % 3 != 0
) Il a renvoyé une liste de booléens plutôt que des chiffres.
Pourquoi map
renvoie parfois un booléen et d'autres fois la valeur de retour réelle?
Quelqu'un peut-il m'expliquer exactement la différence entre map
et filter
?
list(map(cube, range(1, 11)))
est équivalent à
[cube(1), cube(2), ..., cube(10)]
Alors que la liste est revenue par
list(filter(f, range(2, 25)))
est équivalent à result
après avoir exécuté
result = []
for i in range(2, 25):
if f(i):
result.append(i)
Notez que lorsque vous utilisez map
, les éléments du résultat sont des valeurs renvoyées par la fonction cube
.
En revanche, les valeurs renvoyées par f
in filter(f, ...)
ne sont pas les éléments de result
. f(i)
est uniquement utilisé pour déterminer si la valeur i
doit être conservée dans result
.
Dans python2, map
et filter
listes de retour. En Python3, map
et filter
itérateurs de retour. Au-dessus, list(map(...))
et list(filter(...))
est utilisée pour vous assurer que le résultat est une liste.
map
et filter
fonction de python est assez différent car ils se produisent très différemment. Ayons un exemple rapide pour les différencier.
Fonction de carte
Définissons une fonction qui prendra un argument de chaîne et vérifiez si elle se présente dans des séquences de lettre de voyelle.
def lit(Word):
return Word in 'aeiou'
Maintenant, créons une fonction de carte pour cela et passons de la chaîne aléatoire.
for item in map(lit,['a','b','e']):
print(item)
Et oui c'est équivalent à suivre
lit('a') , lit('b') , lit('e')
il ira simplement imprimer
True
False
True
Fonction Filtre
Créons maintenant une fonction filter
pour cela et passez une chaîne aléatoire.
for item in filter(lit,['a','b','e']):
print(item)
filter
Comme son nom l'indique, filtre l'original ibler et retentit les éléments qui renvoient tristolet pour la fonction fournie à la fonction de filtrage.
Il ira simplement imprimer
a
e
Fourchette ici pour référence future, si vous le trouvez utile.
filtre - renvoie la position de la vraie valeur
var_list = [10,20,0,1]
var_b = list(filter(lambda var_a : var_a*2,var_list))
print("Values are",var_b)
Sortie
Les valeurs sont [10, 20, 1]
map - retourne le résultat réel
var_list = [10,20,0,1]
var_b = list(map(lambda var_a : var_a*2,var_list))
print("Values are",var_b)
Sortie
Les valeurs sont [20, 40, 0, 2]
Réduire - Prenez les 2 premiers éléments de la liste, puis appelle la fonction, dans l'appel de fonction suivante, le résultat de l'appel précédent sera le 1er argument et la 3ème élément de la liste sera 2ème argument
from functools import *
var_list = [10,20,0,1]
var_b = list(map(lambda var_a : var_a*2,var_list))
print("Values of var_b ",var_b)
var_c = reduce(lambda a,b:a*2,var_b)
print("Values of var_c",var_c)
Sortie
Valeurs de var_b [20, 40, 0, 2]
Valeurs de var_c 160
La fonction de filtrage est utilisée pour filtrer les résultats de notre liste d'origine tandis que la fonction Carte est utilisée pour appliquer une fonction sur notre liste d'origine et une nouvelle liste est donc générée. Voir ci-dessous des exemples où la fonction de filtrage est utilisée pour renvoyer des éléments dans la liste uniquement quand ils sont impairs. La fonction Carte est utilisée ci-dessous pour revenir au carré de chaque élément de la liste.
Fonction Lambda: Utilisation de Lambda: La définition Lambda n'inclut pas une déclaration de "retour", elle contient toujours une expression qui est renvoyée. Nous pouvons également mettre une définition de Lambda n'importe où une fonction est attendue et nous n'avons pas à l'attribuer à une variable du tout. C'est la simplicité des fonctions de Lambda.
g = lambda x: x*x*x
print(g(5))
#125
La fonction Filtre () In Python prend une fonction et une liste comme des arguments. Cela offre un moyen élégant de filtrer tous les éléments d'une séquence "séquence", pour laquelle la fonction renvoie true . Voici un petit programme qui renvoie les numéros impairs d'une liste d'entrée:
li = [4,5,7,8,9]
final_list = list(filter(lambda x: (x%2 != 0) , li))
print(final_list)
#[5,7,9]
La fonction Carte () In Python prend une fonction et une liste comme argument. Une nouvelle liste est renvoyée en appliquant la fonction à chaque élément de liste.
li = [5, 7, 4, 9]
final_list = list(map(lambda x: x*x , li))
print(final_list)
#[25, 49, 16, 81]
filtre (fonction, iTABLE) fonction (pointeur, comme dans C) retour Boolean Type
carte (fonction, iTable) fonction (pointeur, comme dans c) retour par exemple int
def filterFunc(x):
if x & 1 == 0:
return False
return True
def squareFunc(x):
return x ** 2
def main():
nums = [5, 2, 9, 4, 34, 23, 66]
odds = list(filter(filterFunc, nums)) # filter(function, iterable)
print(odds)
square = list(map(squareFunc, nums)) # map(function, iterable)
print(square)
if __name__ == '__main__':
main()