¿Cómo truncar todas las cadenas en una lista a la misma longitud, de alguna manera pitónica?

Digamos que tenemos una lista como:

g = ["123456789123456789123456", 
     "1234567894678945678978998879879898798797", 
     "6546546564656565656565655656565655656"]

Necesito los primeros doce caracteres de cada elemento:

["123456789123", 
 "123456789467", 
 "654654656465"]

Bien, puedo construir una segunda lista en un bucle for, algo como esto:

g2 = []
for elem in g:
    g2.append(elem[:12])

pero estoy bastante seguro de que hay formas mucho mejores y no puedo descifrarlas por ahora. ¿Algunas ideas?

preguntado el 04 de julio de 12 a las 10:07

3 Respuestas

Utilice una lista de comprensión:

g2 = [elem[:12] for elem in g]

Si prefiere editar g en el lugar, utilice la sintaxis de asignación de sectores con una expresión de generador:

g[:] = (elem[:12] for elem in g)

Demostración:

>>> g = ['abc', 'defg', 'lolololol']
>>> g[:] = (elem[:2] for elem in g)
>>> g
['ab', 'de', 'lo']

Respondido 04 Jul 12, 11:07

digno de señalar que si la cadena es más corto de 2 caracteres, todavía funciona sin arrojar "IndexError". Solo mantendrás la cadena original. - Jean-Francois Fabre

Utilice una lista de comprensión:

[elem[:12] for elem in g]

Respondido 04 Jul 12, 11:07

Otra opción es usar map(...) :

b = map(lambda x: x[:9],g)

Respondido 04 Jul 12, 11:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.