Saltar al contenido

Python: reducir (lista de cadenas) -> string

Este escrito ha sido probado por expertos para asegurar la veracidad de este ensayo.

Solución:

El resultado de ejecutar la función pasada como primer parámetro, será el primer parámetro de esa función en la siguiente iteración. Entonces, tu código funciona así

lambda x, y: x[0] + "." + y[0]
  1. Cuando x, y son 'alfa' y 'bravo' respectivamente, a.b.

  2. Ahora, x estarán a.b y y estarán 'charlie'por lo que el resultado será a.c

  3. Ahora, x estarán a.c y y estarán 'delta'por lo que el resultado será a.d

Por eso el resultado es a.d

Para obtener lo que quería, tome todos los primeros caracteres de todas las cadenas para formar una lista y junte todos los elementos con .como esto

print(".".join([item[0] for item in data]))
# a.b.c.d

Nota: No preferiré de esta manera, pero en aras de la exhaustividad, puede hacerlo con reducecomo esto

data = ['alfa', 'bravo', 'charlie', 'delta']
print(ft.reduce(lambda x, y: x + ("." if x else "") + y[0], data, ""))
# a.b.c.d

Ahora, el último vacío string será el primer valor para x en la primera iteración. y usamos . sólo si x no es un vacío string de lo contrario usamos un vacío stringpara que la concatenación diera el resultado que querías.

Si desea utilizar el reduce la forma más elegante sería hacer:

from functools import reduce
from operator import add

reduce(add, ['a', 'b', 'c']) # abc

De lo contrario, creo que es mejor que uses el string.join interfaz:

''.join(['a', 'b', 'c']) # abc 
'.'.join(['a', 'b', 'c']) # a.b.c 

Si te gusta la informática, puedes dejar una reseña acerca de qué te ha impresionado de esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *