Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: n1sen en 4 Diciembre 2017, 02:40 am



Título: [Python 3] Unir dos listas en una
Publicado por: n1sen en 4 Diciembre 2017, 02:40 am
Vengo a preguntar como unir dos listas en una, he intentado con .join y .append pero no ha funcionado.
Tengo esta lista:
Código:
['STR_PRINT "Hola mundo!"']
['DIV("VOID", 5, 5)']
['INT("test", "54")']
['']

Como se ve, cada linea esta en una lista distinta. (se esta leyendo de un archivo)
Deberia estar asi:
Código:
['STR_PRINT "Hola mundo!"', 'DIV("El numero 5 en 5 cabe:", 5, 5)', 'INT("test", "54")']
Aca tengo un fragmento del codigo que me genera problema:
Código
  1. def PRG(path):
  2.    out_file = input("Output file name..: ")
  3.    with open(path, 'r') as inputfile:
  4.        with open(out_file, 'wb') as outputfile:
  5.            for f1 in inputfile:
  6.                asm_file_cont = [f1[:-1]] #El [:-1] es para quitar el salto de linea
  7.                dump(asm_file_cont, outputfile)
  8.                print(asm_file_cont)
  9.  
Saludos


Título: Re: [Python 3] Unir dos listas en una
Publicado por: aangrymasther en 4 Diciembre 2017, 10:16 am
No estoy seguro de que sea esto lo que quieras, pero pruebas con esto:

Código:
lista1 = ["2" , "3"]
lista2 = ["4" , "5"]

def unir(lista1 , lista2):
lista = []
for x in lista1:
lista.append(x)
for x in lista2:
lista.append(x)
return lista
for x in unir(lista1, lista2):
print x


Título: Re: [Python 3] Unir dos listas en una
Publicado por: tincopasan en 4 Diciembre 2017, 11:10 am
y ¿por qué no?:
Código
  1. lista1 = ["2" , "3"]
  2. lista2 = ["4" , "5"]
  3. print(lista1+lista2)
  4.  


Título: Re: [Python 3] Unir dos listas en una
Publicado por: aangrymasther en 4 Diciembre 2017, 11:17 am
y ¿por qué no?:
Código
  1. lista1 = ["2" , "3"]
  2. lista2 = ["4" , "5"]
  3. print(lista1+lista2)
  4.  
así no consigues una lista nueva que contenga las dos, solo imprimes ambas.


Título: Re: [Python 3] Unir dos listas en una
Publicado por: ivancea96 en 4 Diciembre 2017, 13:31 pm
así no consigues una lista nueva que contenga las dos, solo imprimes ambas.

Se entiende. En vez de print, simplemente lo asignas a una variable.


Título: Re: [Python 3] Unir dos listas en una
Publicado por: tincopasan en 4 Diciembre 2017, 13:54 pm
Exacto ivancea96
aangrymasther no quise escribir lo que era obvio:
Código
  1. lista1 = ["2" , "3"]
  2. lista2 = ["4" , 5]
  3. x=lista1+lista2   #ahí está la nueva lista
  4. print(x)
  5.  


Título: Re: [Python 3] Unir dos listas en una
Publicado por: n1sen en 5 Diciembre 2017, 01:38 am
Gracias, pero nada me ha servido, ahora me retorna listas vacias. Y aun separadas

Código
  1. def PRG(path):
  2.    out_file = input("Output file name..: ")
  3.    with open(path, 'r') as inputfile:
  4.        with open(out_file, 'wb') as outputfile:
  5.            for f1 in inputfile:
  6.                asm_file_cont = []
  7.                f1 = [f1[:-1]]
  8.                asm_file_cont + f1
  9.                dump(asm_file_cont, outputfile)
  10.                print(asm_file_cont)


Título: Re: [Python 3] Unir dos listas en una
Publicado por: tincopasan en 5 Diciembre 2017, 04:35 am
la verdad que no entiendo tu lógica de programación ni lo que querés hacer, así que supongo estás leyendo un archivo y quieres escribir todo el contenido en una lista en otro.Hay formas mejores que la que usas, pero bueno arreglemos esta:

['STR_PRINT "Hola mundo!"']
['DIV("VOID", 5, 5)']
['INT("test", "54")']
['']

supongo que estas listas son el resultado de lo leído en un archivo
y tendría que quedar así:

['STR_PRINT "Hola mundo!"', 'DIV("El numero 5 en 5 cabe:", 5, 5)', 'INT("test", "54")']  según lo que pusiste eso ya requiere mucho más código porque debe interpretar que es:'DIV("VOID", 5, 5)']
Ahora bien sigamos suponiendo y fue un error de copia y unicamente leo las líneas tal cual y las paso a una lista con tu código:
Código
  1.    def PRG(path):
  2.        out_file = input("Output file name..: ")
  3.        with open(path, 'r') as inputfile:
  4.            with open(out_file, 'wb') as outputfile:
  5.                for f1 in inputfile:
  6.                    asm_file_cont = []    #cada vez que recorra el for la lista vuelve a estar vacía
  7.                    f1 = [f1[:-1]]
  8.                    asm_file_cont + f1
  9.                    dump(asm_file_cont, outputfile)
  10.                    print(asm_file_cont)   #acá se verá en cada iteración  
  11.  
en fin probá esto:
Código
  1. def PRG(path):
  2.    asm_file_cont = []
  3.    out_file = input("Output file name..: ")
  4.    with open(path, 'r') as inputfile:
  5.        with open(out_file, 'wb') as outputfile:
  6.            for f1 in inputfile:
  7.                f1 = [f1[:-1]]
  8.                asm_file_cont.append(" ".join(f1))#por tu ejemplo lo convierto a cadena
  9.                #dump(asm_file_cont, outputfile)  lo anulé porque no tengo idea que es dump
  10.                                                                 #supogo que es para escribir el contenido en el otro archivo
  11.    print(asm_file_cont)
  12.  


Título: Re: [Python 3] Unir dos listas en una
Publicado por: ivancea96 en 5 Diciembre 2017, 15:11 pm
No asignaste el resultado de la suma a la variable:
Código
  1. asm_file_cont = asm_file_cont + f1


Título: Re: [Python 3] Unir dos listas en una
Publicado por: tincopasan en 5 Diciembre 2017, 15:20 pm
 ivancea96  esa es una forma, esta es más parecida a la que él quería usar
Código
  1. asm_file_cont +=  f1

no la use porque antes dijo que no le andaba el append y el join


Título: Re: [Python 3] Unir dos listas en una
Publicado por: n1sen en 7 Diciembre 2017, 00:03 am
Gracias, funciono. La funcion dump es una funcion del modulo pickle (un modulo para serializar objetos)