Moltes vegades, mentre treballem amb cadenes ens trobem amb aquest problema en què hem d'obtenir totes les ocurrències numèriques. Aquest tipus de problemes es donen generalment en la programació competitiva i també en el desenvolupament web. Parlem de certes maneres en què es pot resoldre aquest problema 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.>
Extreu números d'una cadena en Python
A continuació es mostren els mètodes que tractarem en aquest article:
- Utilitzant Comprensió de llista i isdigit() mètode
- Utilitzant re.findall() mètode
- Utilitzant isnumèric () mètode
- Utilitzant Filtre () funció
- Utilitzant un bucle i isdigit() mètode
- Utilitzant str.translate() amb str.maketrans()
- Utilitzant numpy mòdul
Extreu números de la cadena utilitzant la comprensió de llistes i isdigit() mètode
Aquest problema es pot resoldre utilitzant la funció dividida per convertir la cadena en llista i després el comprensió de llista que ens pot ajudar a recórrer la llista i isdigit La funció ajuda a treure el dígit d'una cadena.
Python 3
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))> |
>
>Sortida
The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>
Complexitat temporal: O(n), on n és el nombre d'elements de la cadena d'entrada.
Espai auxiliar: O(n), on n és el nombre de nombres de la cadena d'entrada.
Extreu el dígit de la cadena utilitzant re.findall() mètode
Aquest problema en particular també es pot resoldre amb Python expressió regular, podem utilitzar el funció findall per comprovar les ocurrències numèriques mitjançant una cadena d'expressió regular coincident.
Python 3
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))> |
>
>Sortida
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Extraieu Interger de la cadena mitjançant el mètode isnumeric().
A Python, tenim és numèric funció que pot dir a l'usuari si un element en particular és un nombre o no, així que amb aquest mètode també podem extreure el nombre d'una cadena.
Python 3
sql ordenar per data
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))> |
>
>Sortida
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complexitat temporal: O(N)
Espai auxiliar: O(N)
Extreu el dígit de la cadena mitjançant la funció Filter().
Primer, definim la cadena d'entrada i després imprimim la cadena original i dividim la cadena d'entrada en una llista de paraules utilitzant el dividir () mètode. Utilitzar el filtre () funció per filtrar els elements no numèrics de la llista aplicant la funció funció lambda x .isdigit() a cada elementConvertiu els elements restants de la llista filtrada en nombres enters mitjançant una comprensió de llista
Imprimeix la llista resultant de nombres enters
Python 3
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))> |
>
>Sortida
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complexitat temporal: O(n), on n és la longitud de la cadena d'entrada. El mètode split() triga O(n) temps a dividir la cadena d'entrada en una llista de paraules, i la funció filter() triga O(n) temps a iterar sobre cada element de la llista i aplicar la funció lambda. La comprensió de la llista triga O(k) temps, on k és el nombre d'elements de la llista filtrada que són dígits, i normalment és molt més petit que n. Per tant, la complexitat global del temps és O(n).
Complexitat de l'espai auxiliar: O(n), ja que el mètode split() crea una llista de paraules que té la mateixa longitud que la cadena d'entrada, i la funció filter() crea una llista filtrada que pot tenir la mateixa longitud que la llista d'entrada. La comprensió de la llista crea una nova llista d'enters que normalment és molt més petita que la llista d'entrada, però la complexitat de l'espai encara és O(n) en el pitjor dels casos. Per tant, la complexitat total de l'espai auxiliar és O(n)
Extraieu Interger de la cadena mitjançant un mètode de bucle i isdigit().
Utilitzeu un bucle per iterar sobre cada caràcter de la cadena i comproveu si és un dígit amb el isdigit() mètode. Si és un dígit, afegiu-lo a una llista.
Python 3
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)> |
>
>Sortida
The numbers list is: [2, 4]>
Complexitat temporal: O(n), on n és la longitud de la corda.
Espai auxiliar: O(k), on k és el nombre de dígits de la cadena.
Extreu números de la cadena utilitzant str.translate() amb str.maketrans()
Definiu la cadena d'entrada i després inicialitzeu una taula de traducció per eliminar caràcters no numèrics str. maketrans() . Ús str. traduir() amb la taula de traducció per eliminar caràcters no numèrics de la cadena i emmagatzemar el resultat en una cadena nova anomenada cadena_numèrica . Ús str. dividir () per dividir el cadena_numèrica en una llista de paraules i emmagatzemar el resultat en una llista nova anomenada paraules. Inicieu una llista buida anomenada nombres per emmagatzemar els nombres enters resultants i, a continuació, itereu sobre cada paraula de la llista de paraules. Comproveu si la paraula és una cadena numèrica utilitzant str. isdigit() .Si la paraula és una cadena numèrica, convertiu-la en un enter utilitzant int() i afegiu-lo a la llista de números.
Imprimeix la llista resultant de nombres enters.
A continuació es mostra la implementació de l'enfocament anterior:
Python 3
# 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))> |
>
>Sortida
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complexitat temporal: O(n), on n és la longitud de la cadena d'entrada. El mètode str.translate() i el mètode str.split() triguen O(n) temps, i la iteració sobre cada paraula de la llista de paraules triga O(k) temps, on k és el nombre de paraules de la llista que són cadenes numèriques.
Espai auxiliar: O(n), mentre creem una nova cadena i una nova llista de paraules que tenen cadascuna la mateixa longitud que la cadena d'entrada, i creem una nova llista de nombres enters que tingui una longitud màxima de k, on k és el nombre de paraules de la llista que són cadenes numèriques.
Extreu números de la cadena utilitzant el mòdul numpy
Inicialitzar la cadena test_string i després dividir la cadena en una llista de paraules utilitzant el mètode split i crear a numpy matriu x de la llista resultant. Utilitzeu np.char .is numèric per crear una màscara booleana que indiqui quins elements de x són numèrics. Utilitzeu aquesta màscara booleana per indexar x i extreure només els elements numèrics. Converteix la matriu de cadenes resultant en una matriu d'enters utilitzant astype.
Imprimeix la matriu resultant de nombres enters.
Python 3
embolcall de paraules css
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.> |
>
>
Sortida:
The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>
Complexitat temporal: O(n), on n és la longitud de la cadena original test_string. Això es deu al fet que el mètode split triga O(n) temps a dividir la cadena en una llista de paraules, i el mètode np.char.isnumeric triga O(n) temps a crear la màscara booleana. La resta d'operacions triguen un temps constant.
Espai auxiliar: O(n), on n és la longitud de la cadena original test_string. Això es deu al fet que creem una matriu numpy x per emmagatzemar les paraules de la cadena, que ocupa espai O(n). L'espai utilitzat per la matriu numpy d'enters resultant també és O(n), ja que conté tots els elements numèrics de la cadena.