Molte volte, lavorando con le stringhe, ci imbattiamo in questo problema in cui dobbiamo ottenere tutte le occorrenze numeriche. Questo tipo di problema si verifica generalmente nella programmazione competitiva e anche nello sviluppo web. Discutiamo alcuni modi in cui questo problema può essere risolto Pitone .
Input: 'There are 2 apples for 4 persons' Output: [2, 4] Explanation: 2 and 4 are the only number present in the input string.>
Estrai numeri da una stringa in Python
Di seguito sono riportati i metodi che tratteremo in questo articolo:
- Utilizzando Comprensione degli elenchi E ècifra() metodo
- Utilizzando re.findall() metodo
- Utilizzando ènumerico() metodo
- Utilizzando Filtro() funzione
- Utilizzando un ciclo e ècifra() metodo
- Utilizzando str.translate() con str.maketrans()
- Utilizzando insensato modulo
Estrai numeri da una stringa utilizzando la comprensione delle liste e isdigit() metodo
Questo problema può essere risolto utilizzando la funzione split per convertire la stringa in elenco e quindi il file comprensione delle liste che può aiutarci a scorrere l'elenco e isdigit la funzione aiuta a estrarre la cifra da una stringa.
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))> |
>
rendere eseguibile lo script
>Produzione
The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>
Complessità temporale: O(n), dove n è il numero di elementi nella stringa di input.
Spazio ausiliario: O(n), dove n è il numero di numeri nella stringa di input.
Estrai la cifra dalla stringa usando re.findall() metodo
Questo particolare problema può essere risolto anche utilizzando Python espressione regolare, possiamo usare il funzione trova tutto per verificare le occorrenze numeriche utilizzando una stringa regex corrispondente.
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))> |
>
>Produzione
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Estrai Interger dalla stringa utilizzando il metodo isnumeric()
In Python, abbiamo è numerico funzione che può dire all'utente se un particolare elemento è un numero o meno, quindi con questo metodo possiamo anche estrarre il numero da una stringa.
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))> |
>
>Produzione
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complessità temporale: O(N)
Spazio ausiliario: O(N)
Estrai la cifra dalla stringa utilizzando la funzione Filter()
Per prima cosa definiamo la stringa di input, quindi stampiamo la stringa originale e dividiamo la stringa di input in un elenco di parole utilizzando il comando diviso() metodo. Usa il filtro() funzione per filtrare gli elementi non numerici dall'elenco applicando la funzione funzione lambda X .isdigit() a ciascun elementoConvertire gli elementi rimanenti nell'elenco filtrato in numeri interi utilizzando una comprensione di elenco
Stampa l'elenco risultante di numeri interi
Python3
cos'è un monitor
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))> |
>
come ottenere il piccione selvatico su Android
>Produzione
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complessità temporale: O(n), dove n è la lunghezza della stringa di input. Il metodo split() impiega O(n) tempo per dividere la stringa di input in un elenco di parole e la funzione filter() impiega O(n) tempo per scorrere ogni elemento nell'elenco e applicare la funzione lambda. La comprensione dell'elenco richiede tempo O(k), dove k è il numero di elementi nell'elenco filtrato che sono cifre, e questo è in genere molto più piccolo di n. Pertanto, la complessità temporale complessiva è O(n).
Complessità dello spazio ausiliario: O(n), poiché il metodo split() crea un elenco di parole che ha la stessa lunghezza della stringa di input e la funzione filter() crea un elenco filtrato che può avere la stessa lunghezza dell'elenco di input. La comprensione dell'elenco crea un nuovo elenco di numeri interi che in genere è molto più piccolo dell'elenco di input, ma la complessità dello spazio è ancora O(n) nel caso peggiore. Pertanto, la complessità complessiva dello spazio ausiliario è O(n)
Estrai Interger dalla stringa utilizzando un metodo loop e isdigit()
Utilizza un ciclo per scorrere ogni carattere nella stringa e controlla se si tratta di una cifra utilizzando il comando ècifra() metodo. Se è una cifra, aggiungila a un elenco.
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)> |
>
>Produzione
The numbers list is: [2, 4]>
Complessità temporale: O(n), dove n è la lunghezza della stringa.
Spazio ausiliario: O(k), dove k è il numero di cifre nella stringa.
Estrai i numeri dalla stringa usando str.translate() con str.maketrans()
Definire la stringa di input quindi Inizializzare una tabella di traduzione per rimuovere i caratteri non numerici utilizzando stra. maketrans() . Utilizzo stra. tradurre() con la tabella di traduzione per rimuovere i caratteri non numerici dalla stringa e memorizzare il risultato in una nuova stringa chiamata stringa_numerica . Utilizzo stra. diviso() per dividere il stringa_numerica in un elenco di parole e memorizza il risultato in un nuovo elenco chiamato parole. Inizializza un elenco vuoto chiamato numeri per memorizzare i numeri interi risultanti e quindi scorrere ciascuna parola nell'elenco di parole. Controlla se la parola è una stringa numerica utilizzando stra. ècifra() .Se la parola è una stringa numerica, convertila in un numero intero utilizzando int() e aggiungerlo all'elenco dei numeri.
Stampa l'elenco risultante di numeri interi.
Di seguito è riportata l’implementazione dell’approccio di cui sopra:
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))> |
>
carattere di stringa Java
>Produzione
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complessità temporale: O(n), dove n è la lunghezza della stringa di input. Il metodo str.translate() e il metodo str.split() impiegano O(n) tempo e l'iterazione su ciascuna parola nell'elenco di parole richiede O(k) tempo, dove k è il numero di parole nell'elenco che sono stringhe numeriche.
Spazio ausiliario: O(n), poiché creiamo una nuova stringa e un nuovo elenco di parole che hanno ciascuna la stessa lunghezza della stringa di input e creiamo un nuovo elenco di numeri interi che ha una lunghezza massima di k, dove k è il numero di parole nell'elenco che sono stringhe numeriche.
Estrai i numeri dalla stringa usando il modulo Numpy
Inizializza la stringa test_string quindi dividi la stringa in un elenco di parole utilizzando il metodo split e crea un file insensato array x dall'elenco risultante. Utilizzare np.char .isnumeric per creare una maschera booleana che indica quali elementi di x sono numerici. Utilizza questa maschera booleana per indicizzare x ed estrarre solo gli elementi numerici. Converti l'array di stringhe risultante in un array di numeri interi utilizzando astipo.
Stampa l'array di numeri interi risultante.
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.> |
>
>
Produzione:
The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>
Complessità temporale: O(n), dove n è la lunghezza della stringa originale test_string. Questo perché il metodo split impiega tempo O(n) per dividere la stringa in un elenco di parole e il metodo np.char.isnumeric impiega tempo O(n) per creare la maschera booleana. Le restanti operazioni richiedono tempo costante.
Spazio ausiliario: O(n), dove n è la lunghezza della stringa originale test_string. Questo perché creiamo un array numpy x per memorizzare le parole della stringa, che occupa O(n) spazio. Anche lo spazio utilizzato dall'array numpy di interi risultante è O(n), poiché contiene tutti gli elementi numerici della stringa.