separar - lista de caracteres python
Convirtiendo una lista en una cadena (8)
De las preguntas frecuentes de programación de Python para Python 3.6.4:
¿Cuál es la forma más eficiente de concatenar muchas cadenas juntas?
str
objetosstr
ybytes
son inmutables, por lo tanto, la concatenación de muchas cadenas es ineficiente ya que cada concatenación crea un nuevo objeto. En el caso general, el costo total del tiempo de ejecución es cuadrático en la longitud total de la cadena.Para acumular muchos objetos str, la expresión recomendada es colocarlos en una lista y llamar a
str.join()
al final:
chunks = []
for s in my_strings:
chunks.append(s)
result = ''''.join(chunks)
(otro modismo razonablemente eficiente es usar
io.StringIO
)Para acumular muchos objetos de bytes, la expresión recomendada es extender un objeto
bytearray
usando una concatenación in situ (el operador+=
):
result = bytearray()
for b in my_bytes_objects:
result += b
He extraído algunos datos de un archivo y quiero escribirlos en un segundo archivo. Pero mi programa está devolviendo el error:
sequence item 1: expected string, list found
Esto parece estar sucediendo porque write()
quiere una cadena pero está recibiendo una lista.
Entonces, con respecto a este código, ¿cómo puedo convertir el buffer
la lista en una cadena para poder guardar el contenido del buffer
en file2
?
file = open(''file1.txt'',''r'')
file2 = open(''file2.txt'',''w'')
buffer = []
rec = file.readlines()
for line in rec :
field = line.split()
term1 = field[0]
buffer.append(term1)
term2 = field[1]
buffer.append[term2]
file2.write(buffer) # <== error
file.close()
file2.close()
Método 1:
import functools
file2.write(functools.reduce((lambda x,y:x+y), buffer))
Método 2:
import functools, operator
file2.write(functools.reduce(operator.add, buffer))
Método 3:
file2.write(''''.join(buffer))
Prueba str.join
:
file2.write('' ''.join(buffer))
La documentación dice:
Devuelve una cadena que es la concatenación de las cadenas en iterable iterable. El separador entre elementos es la cadena que proporciona este método.
# it handy if it used for output list
list = [1, 2, 3]
stringRepr = str(list)
# print(stringRepr)
# ''[1, 2, 3]''
''''.join(buffer)
buffer=[''a'',''b'',''c'']
obj=str(buffer)
obj[1:len(obj)-1]
dará "''a'', ''b'', ''c''" como salida
file2.write( str(buffer) )
Explicación: str(anything)
convertirá cualquier objeto de python en su representación de cadena. Similar a la salida que obtienes si print(anything)
, pero como una cadena.
NOTA: Probablemente, esto no es lo que desea OP, ya que no tiene control sobre cómo se concatenan los elementos del buffer
, lo pondrá ,
entre cada uno, pero puede ser útil para otra persona.
file2.write('',''.join(buffer))