Python >> Tutoriel Python >  >> Python

Carte Python vers Int

Formulation du problème

Convertir une liste de chaînes à une liste d'entiers en utilisant le map() fonction.

Exemple :

Input:     ['1', '2', '3']
Output:    [1, 2, 3]

Input:     ['42']
Output:    [42]

Input:     ['-1', '-2', '-3']
Output:    [-1, -2, -3]

Solution utilisant la carte

Pour convertir une liste de chaînes en une liste d'entiers, vous pouvez "map to int" en appelant le map(int, lst) sur le int objet de fonction intégré en premier et le lst objet comme deuxième argument. Le résultat est un map objet que vous pouvez reconvertir en liste en utilisant le list() fonction.

Par exemple, la ligne list(map(int, ['1', '2', '3'])) convertit la liste de chaînes ['1', '2', '3'] à la liste d'entiers [1, 2, 3] .

lst = ['1', '2', '3']
res = map(int, lst)

La valeur stockée dans la variable res est un map objet qui n'est pas lisible. Si vous l'imprimez tel quel, cela nous donnera une sortie illisible comme celle-ci :

print(res)
<map object at 0x0000016175ACDDF0>

Pour résoudre ce problème, vous pouvez reconvertir l'objet cartographique en liste en utilisant le list() fonction intégrée.

Le résultat après la conversion est plus joli : 🤩

print(list(res))
# [1, 2, 3]

Dans certains cas, cependant, vous n'avez pas besoin de convertir le map s'opposer à une liste. Par exemple, le map l'objet permet également l'itération dans un for boucle pour que vous n'ayez pas besoin de la convertir en liste :

lst = ['1', '2', '3']
res = map(int, lst)

for x in res:  # < – NOT a list but a map object
    print(x)

Le résultat est, bien sûr :

1
2
3

Comprendre la fonction de carte

N'hésitez pas à consulter mon tutoriel détaillé sur le map() fonction ou regardez simplement ce didacticiel vidéo rapide :

Le map() transforme un ou plusieurs itérables en un nouveau en appliquant une "fonction de transformation" aux ièmes éléments de chaque itérable.

Les arguments sont l'objet de la fonction de transformation et un ou plusieurs itérables .

🚀 Conseil d'expert :Si vous réussissez n itérables comme arguments, la fonction de transformation doit être un n -fonction aire prendre n arguments d'entrée.

La valeur de retour est un map itérable objet d'éléments transformés, et éventuellement agrégés.

Le map object est un itérateur qui enregistre tous les éléments mappés afin que vous puissiez les parcourir. Surtout pour les itérables volumineux, c'est plus efficace qu'une liste Python standard.

Meilleure solution utilisant la compréhension de liste

J'ai écrit un didacticiel complet sur la conversion d'une liste de chaînes en une liste d'entiers. Python est suffisamment flexible pour nous fournir plusieurs façons d'y parvenir :

  • Comment convertir une liste de chaînes en liste d'entiers en Python ?

Le résultat de mon article de blog est le suivant :

La manière la plus Pythonique de convertir une liste de chaînes à une liste d'entiers est d'utiliser la compréhension de liste [int(x) for x in strings] . Il itère sur tous les éléments de la liste et convertit chaque élément de la liste x en une valeur entière en utilisant le int(x) fonction intégrée.

Voici notre exemple utilisant cette approche :

lst = ['1', '2', '3']
res = [int(x) for x in lst]
print(res)
# [1, 2, 3]

Pourquoi la compréhension de liste est-elle meilleure que map() à mon avis ?

Les avantages par rapport à map() sont de légers avantages en termes de performances et une meilleure lisibilité car nous n'empilons pas les appels de fonction comme ceci :list(map(...)) .

Comprendre la compréhension des listes

Comment fonctionne généralement la compréhension de liste ?

La compréhension de liste est une manière compacte de créer des listes. La formule simple est [expression + context] .

  • Expression : Que faire de chaque élément de la liste ?
  • Contexte : Quels éléments sélectionner ? Le contexte consiste en un nombre arbitraire de for et if déclarations.

L'exemple [x for x in range(3)] crée la liste [0, 1, 2] :

>>> [x for x in range(3)]
[0, 1, 2]

L'exemple [int(x) for x in ['1', '2', '3']] convertit chaque élément de chaîne en ['1', '2', '3'] en un entier — en utilisant l'EXPRESSION int(x) — et crée la liste d'entiers [1, 2, 3] :

>>> [int(x) for x in ['1', '2', '3']]
[1, 2, 3]

Si vous avez besoin de rattraper la compréhension de la liste, n'hésitez pas à regarder le didacticiel vidéo suivant :