es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo poner un grupo de números enteros en una fila de un archivo de texto en una lista?

Tengo un archivo de texto compuesto principalmente por números, algo así:

3 011236547892X
9 02321489764 Q
4 031246547873B

Me gustaría extraer cada uno de los siguientes valores (los espacios del 5 al 14, contando desde cero) en una lista:

1236547892
321489764
1246547873

(Tenga en cuenta que cada “número” tiene una longitud de 10 “caracteres”; la segunda fila tiene un espacio al final).

Luego, quiero analizar el contenido de cada lista.

Tengo varias versiones, sin embargo, creo que estoy más cerca con:

with open('k_d_m.txt') as f:
    for line in f:
        range = line.split()
        num_lst = [x for x in range(3,10)]

print(num_lst)

Sin embargo, tengo el error TypeError: “object ‘list’ is not callable”.

¿Cuál es la mejor manera de avanzar?

Lo que quiero hacer con num_lst es, entre otras cosas, lo siguiente:

num_lst = list(map(int, str(num)))
print(num_lst)

nth = 2
odd_total = sum(num_lst[0::nth])
even_total = sum(num_lst[1::nth])
print(odd_total)
print(even_total)

if odd_total - even_total == 0 or odd_total - even_total == 11:
    print("El número está bien")
else:
    print("El número no está bien")
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código proporcionado es que se está utilizando el nombre de variable “range”, el cual es una función integrada de Python. Esto causa un TypeError cuando se intenta llamar a esta función más adelante. Para solucionar esto, simplemente cambia el nombre de la variable por algo más, como “num_range”. El código actualizado debería verse así:

    with open('k_d_m.txt') as f:
        for line in f:
            num_range = line.split()[1][5:15]
            num_lst = [int(x) for x in num_range]
            print(num_lst)
    

    Este código utiliza la extracción de cadenas para extraer el rango de 10 caracteres deseado de cada línea, y luego convierte cada carácter en un entero y lo almacena en una lista llamada “num_lst”. Esta lista luego puede ser utilizada en tu análisis de código según lo deseado.

    Ten en cuenta que también puedes considerar utilizar una comprensión de listas para simplificar aún más el código:

    with open('k_d_m.txt') as f:
        num_lists = [[int(x) for x in line.split()[1][5:15]] for line in f]
    
    for num_lst in num_lists:
        print(num_lst)
    

    Esta versión lee cada línea del archivo, extrae el rango deseado y convierte los caracteres en enteros en una sola comprensión de lista que se almacena en una variable llamada “num_lists”. Esta variable contiene una lista de listas, donde cada lista interna corresponde a una línea del archivo. Los datos resultantes pueden ser fácilmente iterados utilizando un bucle for para realizar tu análisis.

Comments are closed.