Se me presentó la tarea de convertir una cadena de números mixtos ("1 3 5 8 10"), por ejemplo, y mi objetivo es poner estos números en una lista como enteros.

Tengo el conocimiento y la experiencia para dividir la cadena e int () para convertirlos en enteros, pero el problema viene en cómo lo estoy haciendo.
El problema específico que tengo es cuando se trata de recorrer la cadena, encontrar los caracteres y convertirlos en int.
A medida que avanza y llega a 10 (o cualquier número de 2 dígitos), convierte cada número en su propio dígito; entonces: 10 sería [1, 0], no [10].

Disculpe el desorden de código aquí, he estado tratando de ver qué sucede en cada paso con impresiones:

def iq_test(numbers):
    print(numbers)
    nums = []
    numbers.split(" ")
    nums.append(numbers)
    print (numbers)
    for char in numbers:
        if char == " ":
            del char
        else:
            nums.append(int(char))  # Problem arises here, where a 2 digit number is being added to the list as 2 separate numbers
    print(nums)

Todavía es muy nuevo en la codificación, por lo que si nota un problema lógico importante con el que me encuentro, le agradecería que me lo señalara.

0
TJMcButters 28 oct. 2017 a las 02:35

4 respuestas

La mejor respuesta

Primero, numbers.split(" ") por sí solo no está haciendo nada útil. Asignarlo a una variable. Además, si no proporciona parámetros, siempre se dividirá en espacios, por lo que puede usar eso.

nums = numbers.split()

Con eso, debe usar for num in nums para recorrer los elementos divididos en lugar de recorrer los caracteres de la cadena de entrada.

En cualquier caso, puede acortar todo esto utilizando una comprensión de lista para aplicar esa función int y devolver la lista de enteros.

Y ha definido una función, por lo que debe return el valor, no solo imprimirlo.

nums = [int(s) for s in numbers.split()] 
return nums

Y luego lo harías print(iq_test("1 2 3 10"))

2
cricket_007 31 oct. 2017 a las 13:54

Está utilizando una matriz incorrecta para la iteración y también está haciendo algunas conversiones incorrectas:

def iq_test(numbers):
    print(numbers)
    nums = []
    for number in numbers.split(" "):
         nums.append(int(number))
    print(nums)
0
PerunSS 27 oct. 2017 a las 23:40

Puedes usar expresiones regulares:

import re
s = "1 3 5 8 10"
final_data = list(map(int, re.findall('\d+', s)))
print(final_data)

Salida:

[1, 3, 5, 8, 10]
1
Ajax1234 27 oct. 2017 a las 23:46
def iq_test(numbers):
    nums = []
    for num in numbers.split():
        nums.append(int(num)) 

Supongo que ... podrías (y probablemente deberías) simplemente hacer una lista de comprensión

 nums = [int(num) for num in numbers.split()]
0
Joran Beasley 27 oct. 2017 a las 23:39