Muchas veces, mientras trabajamos con cadenas, nos encontramos con este problema en el que necesitamos obtener todas las ocurrencias numéricas. Este tipo de problemas generalmente ocurren en la programación competitiva y también en el desarrollo web. Analicemos ciertas formas en que este problema se puede resolver en Pitón .
Input: 'There are 2 apples for 4 persons' Output: [2, 4] Explanation: 2 and 4 are the only number present in the input string.>
Extraer números de una cadena en Python
A continuación se detallan los métodos que cubriremos en este artículo:
- Usando Comprensión de listas y es dígito() método
- Usando re.findall() método
- Usando isnumérico() método
- Usando Filtrar() función
- Usando un bucle y es dígito() método
- Usando str.traducir() con str.maketrans()
- Usando engordado módulo
Extraiga números de una cadena mediante comprensión de listas y es dígito() método
Este problema se puede resolver utilizando la función de división para convertir una cadena en una lista y luego la comprensión de la lista que puede ayudarnos a recorrer la lista y es dígito La función ayuda a sacar el dígito de una cadena.
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))> |
>
>Producción
The original string : There are 2 apples for 4 persons The numbers list is :[2, 4]>
Complejidad del tiempo: O(n), donde n es el número de elementos en la cadena de entrada.
Espacio Auxiliar: O(n), donde n es el número de números en la cadena de entrada.
Extraiga dígitos de la cadena usando re.findall() método
Este problema particular también se puede resolver usando Python. expresión regular, podemos usar el función de búsqueda para comprobar las apariciones numéricas utilizando una cadena de expresiones regulares coincidente.
cómo convertir una cadena a un carácter
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))> |
>
>Producción
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Extraiga Interger de una cadena usando el método isnumeric()
En Python tenemos isnumérico función que puede decirle al usuario si un elemento en particular es un número o no, por lo que con este método también podemos extraer el número de una cadena.
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))> |
>
>Producción
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complejidad del tiempo: O(N)
Espacio auxiliar: O(N)
Extraiga dígitos de la cadena usando la función Filter()
Primero, definimos la cadena de entrada, luego imprimimos la cadena original y dividimos la cadena de entrada en una lista de palabras usando el dividir() método. Utilizar el filtrar() función para filtrar elementos no numéricos de la lista aplicando la función lambda X .isdigit() a cada elementoConvierta los elementos restantes en la lista filtrada a números enteros usando una lista por comprensión
Imprime la lista resultante de números enteros.
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))> |
>
>Producción
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complejidad del tiempo: O(n), donde n es la longitud de la cadena de entrada. El método split() tarda O(n) tiempo en dividir la cadena de entrada en una lista de palabras, y la función filter() tarda O(n) tiempo en iterar sobre cada elemento de la lista y aplicar la función lambda. La comprensión de la lista requiere un tiempo O(k), donde k es el número de elementos de la lista filtrada que son dígitos, y esto suele ser mucho menor que n. Por lo tanto, la complejidad temporal general es O (n).
Complejidad del espacio auxiliar: O(n), ya que el método split() crea una lista de palabras que tiene la misma longitud que la cadena de entrada, y la función filter() crea una lista filtrada que puede tener hasta la misma longitud que la lista de entrada. La comprensión de la lista crea una nueva lista de números enteros que normalmente es mucho más pequeña que la lista de entrada, pero la complejidad del espacio sigue siendo O(n) en el peor de los casos. Por lo tanto, la complejidad general del espacio auxiliar es O (n)
Extraiga Interger de una cadena usando un bucle y el método isdigit()
Use un bucle para iterar sobre cada carácter en la cadena y verifique si es un dígito usando el es dígito() método. Si es un dígito, agréguelo a una lista.
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)> |
>
>Producción
The numbers list is: [2, 4]>
Complejidad del tiempo: O(n), donde n es la longitud de la cuerda.
Espacio auxiliar: O(k), donde k es el número de dígitos de la cadena.
Extraiga números de una cadena usando str.translate() con str.maketrans()
Defina la cadena de entrada y luego inicialice una tabla de traducción para eliminar caracteres no numéricos usando calle. hacertrans() . Usar calle. traducir() con la tabla de traducción para eliminar caracteres no numéricos de la cadena y almacenar el resultado en una nueva cadena llamada cadena_numérica . Usar calle. dividir() para dividir el cadena_numérica en una lista de palabras y almacenar el resultado en una nueva lista llamada palabras. Inicialice una lista vacía llamada números para almacenar los números enteros resultantes y luego repita cada palabra en la lista de palabras. Compruebe si la palabra es una cadena numérica usando calle. es dígito() .Si la palabra es una cadena numérica, conviértala a un número entero usando En t() y agréguelo a la lista de números.
Imprima la lista resultante de números enteros.
A continuación se muestra la implementación del enfoque anterior:
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))> |
>
>Producción
The original string : There are 2 apples for 4 persons The numbers list is : [2, 4]>
Complejidad del tiempo: O(n), donde n es la longitud de la cadena de entrada. El método str.translate() y el método str.split() toman O(n) tiempo, y iterar sobre cada palabra en la lista de palabras toma O(k) tiempo, donde k es el número de palabras en la lista que son cadenas numéricas.
Espacio Auxiliar: O(n), a medida que creamos una nueva cadena y una nueva lista de palabras, cada una de las cuales tiene la misma longitud que la cadena de entrada, y creamos una nueva lista de números enteros que tiene una longitud máxima de k, donde k es el número de palabras de la lista que son cadenas numéricas.
Extraiga números de una cadena usando el módulo numpy
Inicialice la cadena test_string, luego divida la cadena en una lista de palabras usando el método de división y cree una engordado matriz x de la lista resultante. Utilice np.char .isnumeric para crear una máscara booleana que indique qué elementos de x son numéricos. Utilice esta máscara booleana para indexar x y extraer solo los elementos numéricos. Convierta la matriz de cadenas resultante en una matriz de números enteros usando astipo.
Imprime la matriz resultante de números enteros.
Python3
diferencia entre $ y $$
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.> |
>
>
Producción:
The original string : There are 2 apples for 4 persons The numbers list is : [2 4]>
Complejidad del tiempo: O (n), donde n es la longitud de la cadena original test_string. Esto se debe a que el método split tarda O(n) tiempo en dividir la cadena en una lista de palabras, y el método np.char.isnumeric tarda O(n) en crear la máscara booleana. Las operaciones restantes toman un tiempo constante.
Espacio auxiliar: O(n), donde n es la longitud de la cadena original test_string. Esto se debe a que creamos una matriz numerosa x para almacenar las palabras de la cadena, que ocupa O (n) espacio. El espacio utilizado por la numerosa matriz de números enteros resultante también es O(n), ya que contiene todos los elementos numéricos de la cadena.