Plusieurs fois, lorsque nous travaillons avec des chaînes, nous rencontrons ce problème dans lequel nous devons obtenir toutes les occurrences numériques. Ce type de problème se produit généralement en programmation compétitive mais aussi en développement web. Discutons de certaines façons dont ce problème peut être résolu dans Python .
Input: 'There are 2 apples for 4 persons' Output: [2, 4] Explanation: 2 and 4 are the only number present in the input string.>
Extraire des nombres d'une chaîne en Python
Vous trouverez ci-dessous les méthodes que nous aborderons dans cet article :
- En utilisant Compréhension de la liste et isdigit() méthode
- En utilisant re.findall() méthode
- En utilisant estnumérique() méthode
- En utilisant Filtre() fonction
- En utilisant une boucle et isdigit() méthode
- En utilisant str.translate() avec str.maketrans()
- En utilisant numpy module
Extraire les nombres d'une chaîne en utilisant la compréhension de liste et estdigit() méthode
Ce problème peut être résolu en utilisant la fonction split pour convertir une chaîne en liste, puis en utilisant la fonction split. compréhension de liste ce qui peut nous aider à parcourir la liste et estchiffre La fonction aide à extraire le chiffre d’une chaîne.
Python3
test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # using List comprehension + isdigit() +split()> # getting numbers from string> res>=> [>int>(i)>for> i>in> test_string.split()>if> i.isdigit()]> # print result> print>(>'The numbers list is :'> +> str>(res))> |
tojson java
>
>Sortir
The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>
Complexité temporelle : O(n), où n est le nombre d'éléments dans la chaîne d'entrée.
Espace auxiliaire : O(n), où n est le nombre de nombres dans la chaîne d'entrée.
Extraire le chiffre de la chaîne en utilisant re.findall() méthode
Ce problème particulier peut également être résolu en utilisant Python expression régulière, nous pouvons utiliser le fonction findall pour vérifier les occurrences numériques à l'aide d'une chaîne d'expression régulière correspondante.
Python3
import> re> # initializing string> test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string> temp>=> re.findall(r>'d+'>, test_string)> res>=> list>(>map>(>int>, temp))> # print result> print>(>'The numbers list is : '> +> str>(res))> |
>
>Sortir
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Extraire Interger de la chaîne en utilisant la méthode isnumeric()
En Python, nous avons est numérique fonction qui peut indiquer à l'utilisateur si un élément particulier est un nombre ou non. Ainsi, par cette méthode, nous pouvons également extraire le nombre d'une chaîne.
Python3
test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string> res>=> []> x>=>test_string.split()> for> i>in> x:> >if> i.isnumeric():> >res.append(>int>(i))> # print result> print>(>'The numbers list is : '> +> str>(res))> |
>
entrée utilisateur Java
>Sortir
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complexité temporelle : O(N)
Espace auxiliaire : O(N)
Extraire le chiffre de la chaîne à l'aide de la fonction Filter()
Tout d'abord, nous définissons la chaîne d'entrée, puis imprimons la chaîne d'origine et divisons la chaîne d'entrée en une liste de mots à l'aide du diviser() méthode. Utilisez le filtre() fonction pour filtrer les éléments non numériques de la liste en appliquant la fonction lambda X .isdigit() à chaque élémentConvertir les éléments restants de la liste filtrée en entiers à l'aide d'une compréhension de liste
Imprimer la liste d'entiers résultante
Python3
test_string>=> 'There are 2 apples for 4 persons'> print>(>'The original string : '> +> test_string)> # use the split() method to split> # use the filter() function to filter out non-numeric elements from the list> res>=> list>(>filter>(>lambda> x: x.isdigit(), test_string.split()))> # use a list comprehension to convert the remaining elements to integers> res>=> [>int>(s)>for> s>in> res]> # print the resulting list of integers> print>(>'The numbers list is : '> +> str>(res))> |
>
>Sortir
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complexité temporelle : O(n), où n est la longueur de la chaîne d'entrée. La méthode split() prend un temps O(n) pour diviser la chaîne d'entrée en une liste de mots, et la fonction filter() prend un temps O(n) pour parcourir chaque élément de la liste et appliquer la fonction lambda. La compréhension de la liste prend un temps O(k), où k est le nombre d'éléments de la liste filtrée qui sont des chiffres, et celui-ci est généralement beaucoup plus petit que n. Par conséquent, la complexité temporelle globale est O(n).
Complexité de l'espace auxiliaire : O(n), car la méthode split() crée une liste de mots qui a la même longueur que la chaîne d'entrée, et la fonction filter() crée une liste filtrée qui peut avoir la même longueur que la liste d'entrée. La compréhension de liste crée une nouvelle liste d'entiers qui est généralement beaucoup plus petite que la liste d'entrée, mais la complexité spatiale est toujours O(n) dans le pire des cas. Par conséquent, la complexité globale de l’espace auxiliaire est O(n)
Extraire Interger de la chaîne à l'aide d'une méthode loop et isdigit()
Utilisez une boucle pour parcourir chaque caractère de la chaîne et vérifiez s'il s'agit d'un chiffre à l'aide du isdigit() méthode. S'il s'agit d'un chiffre, ajoutez-le à une liste.
Python3
test_string>=> 'There are 2 apples for 4 persons'> numbers>=> []> for> char>in> test_string:> >if> char.isdigit():> >numbers.append(>int>(char))> print>(>'The numbers list is:'>, numbers)> |
>
>
vlc télécharger des vidéos depuis youtubeSortir
The numbers list is: [2, 4]>
Complexité temporelle : O(n), où n est la longueur de la chaîne.
Espace auxiliaire : O(k), où k est le nombre de chiffres de la chaîne.
Extraire les nombres de la chaîne en utilisant str.translate() avec str.maketrans()
Définissez la chaîne d'entrée puis initialisez une table de traduction pour supprimer les caractères non numériques à l'aide de rue. maketrans() . Utiliser rue. traduire() avec la table de traduction pour supprimer les caractères non numériques de la chaîne et stocker le résultat dans une nouvelle chaîne appelée chaîne_numérique . Utiliser rue. diviser() diviser le chaîne_numérique dans une liste de mots et stockez le résultat dans une nouvelle liste appelée mots. Initialisez une liste vide appelée nombres pour stocker les entiers résultants, puis parcourez chaque mot de la liste de mots. Vérifiez si le mot est une chaîne numérique en utilisant rue. isdigit() .Si le mot est une chaîne numérique, convertissez-le en entier en utilisant int() et ajoutez-le à la liste des numéros.
Imprimez la liste d’entiers résultante.
Vous trouverez ci-dessous la mise en œuvre de l’approche ci-dessus :
Python3
# Define the input string> test_string>=> 'There are 2 apples for 4 persons'> # Print the original string> print>(>'The original string : '> +> test_string)> # Initialize a translation table to remove non-numeric characters> translation_table>=> str>.maketrans('>', '>', '>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!'>#$%&'()*+,-./:;?@[]^_`~')> # Use str.translate() with the translation table to remove non-numeric characters> numeric_string>=> test_string.translate(translation_table)> # Use str.split() to split the string into a list of word> words>=> numeric_string.split()> numbers>=> [>int>(i)>for> i>in> words]> print>(>'The numbers list is : '> +> str>(numbers))> |
>
>Sortir
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complexité temporelle : O(n), où n est la longueur de la chaîne d'entrée. Les méthodes str.translate() et str.split() prennent un temps O(n), et l'itération sur chaque mot de la liste de mots prend un temps O(k), où k est le nombre de mots de la liste qui sont chaînes numériques.
Espace auxiliaire : O(n), lorsque nous créons une nouvelle chaîne et une nouvelle liste de mots ayant chacun la même longueur que la chaîne d'entrée, et que nous créons une nouvelle liste d'entiers ayant une longueur maximale de k, où k est le nombre de mots de la liste qui sont des chaînes numériques.
Extraire les nombres de la chaîne à l'aide du module numpy
Initialisez la chaîne test_string puis divisez la chaîne en une liste de mots à l'aide de la méthode split et créez un numpy tableau x de la liste résultante. Utilisez np.char .isnumérique pour créer un masque booléen indiquant quels éléments de x sont numériques. Utilisez ce masque booléen pour indexer x et extraire uniquement les éléments numériques. Convertissez le tableau de chaînes résultant en un tableau d'entiers en utilisant commetype.
Imprimez le tableau d’entiers résultant.
Python3
import> numpy as np> # initializing string> test_string>=> 'There are 2 apples for 4 persons'> # printing original string> print>(>'The original string : '> +> test_string)> # getting numbers from string using numpy> x>=> np.array(test_string.split())> res>=> x[np.char.isnumeric(x)].astype(>int>)> # print result> print>(>'The numbers list is : '> +> str>(res))> #This code is contributed by Vinay Pinjala.> |
>
>
Sortir:
The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>
Complexité temporelle : O(n), où n est la longueur de la chaîne d'origine test_string. En effet, la méthode split prend un temps O(n) pour diviser la chaîne en une liste de mots, et la méthode np.char.isnumeric prend un temps O(n) pour créer le masque booléen. Les opérations restantes prennent un temps constant.
Espace auxiliaire : O(n), où n est la longueur de la chaîne d'origine test_string. En effet, nous créons un tableau numpy x pour stocker les mots de la chaîne, qui prend un espace O(n). L'espace utilisé par le tableau numpy d'entiers résultant est également O(n), car il contient tous les éléments numériques de la chaîne.