Python >> Tutoriel Python >  >> Python

Tuple Python en entier

Vous avez un tuple d'entiers, mais vous voulez un seul entier. Que pouvez-vous faire ?

Formulation du problème et présentation de la solution

Soit un tuple de valeurs.

t = (1, 2, 3)

Objectif :Convertit le tuple en une seule valeur entière.

Si vous passez simplement un tuple t dans le int(t) fonction intégrée, Python lèvera un TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple' .

t = (1, 2, 3)
int(t)

Cela ne fonctionne pas ! Voici le message d'erreur qui apparaît si vous essayez de faire cette conversion directe de tuple en int :

TypeError: int() argument must be a string, a bytes-like object or a number, not 'tuple'

En principe, il existe deux manières de convertir un tuple en entier et d'éviter cette TypeError :

  • Sélectionnez l'un des éléments de tuple tuple[i] en utilisant l'indexation tuple du i -ème élément de tuple.
  • Agrégez les éléments de tuple en une seule valeur entière, par exemple, en additionnant tous les éléments de tuple ou en combinant leur agrégation de chaîne.

Voyons un aperçu rapide dans notre shell Python interactif :

Exercice :Modifier la méthode 2 pour calculer la moyenne et arrondir à l'entier supérieur !

Plongeons dans chacune des méthodes.

Méthode 1 :somme()

La première façon de convertir un tuple en entier consiste à additionner toutes les valeurs. Le sum() La fonction est intégrée à Python et vous pouvez l'utiliser sur n'importe quel itérable :

La syntaxe est sum(iterable, start=0) :

Argument Description
iterable Somme sur tous les éléments du iterable . Cela peut être une liste, un tuple, un ensemble ou toute autre structure de données qui vous permet d'itérer sur les éléments.
Exemple :sum([1, 2, 3]) renvoie 1+2+3=6 .
start (Facultatif.) La valeur de départ par défaut est 0. Si vous définissez une autre valeur de départ, la somme de toutes les valeurs dans le iterable sera ajouté à cette valeur de départ.
Exemple :sum([1, 2, 3], 9) renvoie 9+1+2+3=15 .

Voici comment vous pouvez utiliser le sum() fonction pour additionner toutes les valeurs d'un itérable (comme un tuple) :

# Method 1: sum()
t = (1, 2, 3)
i = sum(t)
print(i)
# 6

Dans ce cas, il calcule 1+2+3=6. Vous pouvez en savoir plus sur le sum() fonction sur cet article de blog Finxter.

Mais que se passe-t-il si vous souhaitez utiliser toutes les valeurs de tuple comme chiffres d'une valeur entière plus grande ?

Méthode 2 :str() + compréhension de la liste + join()

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.

Vous pouvez l'utiliser en combinaison avec le sum() fonction pour calculer l'entier 123 à partir du tuple (1, 2, 3) —en utilisant les valeurs de tuple comme chiffres du plus grand entier.

# Method 2: str() + list comprehension + join()
t = (1, 2, 3)
i = ''.join(str(x) for x in t)
print(int(i))
# 123

Eh bien, pour être franc, nous n'avons même pas utilisé la compréhension de liste ici - le terme correct pour str(x) for x in t est une "expression génératrice". La différence avec la compréhension de liste est qu'elle crée un générateur au lieu d'une liste.

Si vous aimez la programmation fonctionnelle, vous aimerez peut-être la méthode suivante :

Méthode 3 :str() + map() + join()

La fonction map() crée un nouvel itérable à partir d'un itérable en appliquant une fonction à chaque élément de l'itérable d'origine :

Vous pouvez passer le str() fonction dans le map() fonction pour convertir chaque élément de tuple en une chaîne.

Ensuite, vous pouvez joindre toutes les chaînes ensemble à une grande chaîne. Après avoir converti la grande chaîne en entier, vous avez fusionné avec succès tous les entiers de tuple en une grande valeur entière.

# Method 3: str() + map() + join()
t = (1, 2, 3)
i = ''.join(map(str, t))
print(i)
# 123

Il y a beaucoup de détails sur le string.join() méthode. Vous pouvez lire le tutoriel détaillé sur le blog Finxter. Voici la version courte :

Le string.join(iterable) la méthode concatène tous les éléments de chaîne dans le iterable (comme une liste, une chaîne ou un tuple) et renvoie le résultat sous la forme d'une nouvelle chaîne. Le string sur lequel vous l'appelez est la chaîne de délimitation et elle sépare les éléments individuels. Par exemple, '-'.join(['hello', 'world']) renvoie la chaîne jointe 'hello-world' .

Méthode 4 :Devoirs multiples

Si vous souhaitez simplement obtenir plusieurs entiers en attribuant les valeurs de tuple individuelles à des variables entières, utilisez simplement la fonctionnalité d'affectation multiple :

# Method 4: multiple assignments
t = (1, 2, 3)
a, b, c = t
print(a)
print(b)
print(c)
'''
1
2
3
'''

Variables a , b , et c ont respectivement les valeurs 1, 2 et 3.

Méthode 5 :Fonction de réduction

Après avoir écrit cet article, j'ai réalisé qu'il y avait une cinquième façon de convertir un tuple en une valeur entière :

Pour convertir un tuple en une valeur entière, utilisez le reduce() fonction du functools bibliothèque en combinaison avec la fonction lambda pour agréger les éléments à l'aide de n'importe quelle fonction d'agrégation binaire telle que la multiplication, l'addition, la soustraction comme ceci :

  • Multiplication :functools.reduce(lambda aggregate, element: aggregate * element, t)
  • Ajout :functools.reduce(lambda aggregate, element: aggregate + element, t)
  • Soustraction :functools.reduce(lambda aggregate, element: aggregate - element, t)

Voici un exemple de base utilisant l'agrégation de multiplication pour les débutants :

import functools

t = (1, 2, 3)

res = functools.reduce(lambda aggregate, element: aggregate * element, t)
print(res)
# 6

Voici un exemple de base utilisant l'agrégation d'addition :

import functools

t = (1, 2, 3)

res = functools.reduce(lambda aggregate, element: aggregate + element, t)
print(res)
# 6

Voici un exemple de base utilisant l'agrégation de soustraction :

import functools

t = (1, 2, 3)

res = functools.reduce(lambda aggregate, element: aggregate - element, t)
print(res)
# -4

Si vous avez besoin de répétitions ou d'informations supplémentaires sur la fonction reduce(), lancez cette vidéo :

💡 Infos :Le reduce() fonction de Python functools module agrège un itérable à un seul élément. Il fusionne à plusieurs reprises deux éléments itérables en un seul, comme défini dans l'argument de la fonction. En répétant cela, il ne restera qu'un seul élément :la valeur de retour.