Supongamos longitud de la cadena es siempre un número par,
>>> s = '12345678'
>>> t = iter(s)
>>> '-'.join(a+b for a,b in zip(t, t))
'12-34-56-78'
El t
también se pueden eliminar con
>>> '-'.join(a+b for a,b in zip(s[::2], s[1::2]))
'12-34-56-78'
El algoritmo es agrupar la cadena en pares, y luego unirse ellos con el carácter -
.
El código está escrito así. En primer lugar, se divide en dígitos impares e incluso dígitos.
>>> s[::2], s[1::2]
('1357', '2468')
Entonces the zip
function se utiliza para combinarlos en un iterable de tuplas.
>>> list(zip(s[::2], s[1::2]))
[('1', '2'), ('3', '4'), ('5', '6'), ('7', '8')]
Pero las tuplas no son lo que queremos. Esto debería ser una lista de cadenas. Este es el propósito de la lista por comprensión
>>> [a+b for a,b in zip(s[::2], s[1::2])]
['12', '34', '56', '78']
Finalmente utilizamos str.join()
combinar la lista.
>>> '-'.join(a+b for a,b in zip(s[::2], s[1::2]))
'12-34-56-78'
La primera parte del código es la misma idea, pero consume menos memoria si la cadena es larga.
¿Puedes explicar la parte de la cremallera? ¿Qué está haciendo eso? – root
¿Qué sucede si la longitud de s es impar? –
@Ham: el último personaje desaparecerá. – kennytm