def splice(a, b, n):
a = iter(a)
for i in range(n):
yield next(a)
yield from b
yield from a
…o mejor aún:
def splice2(a, b, n):
a = iter(a)
from itertools import islice
yield from islice(a, n)
yield from b
yield from a
No estoy cortando la lista, estoy cortando un iterador sobre la lista 🙂
- Quiero usar Airbnb, ¿en qué áreas debería elegir quedarme en Praga?
- ¿Por qué mi auto a veces se queda sin aceite tan rápido?
- ¿Soy el único que piensa que este anuncio de Google Play es espeluznante?
- Soy un desarrollador .NET con 4 años de experiencia. Quiero mover mi carrera a dominios de seguridad de la información. ¿Cómo debo hacer esto?
- Estoy trabajando duro y también me apasiona aprender informática, pero mis notas en mis exámenes ni siquiera están a la altura de mis expectativas. ¿Cómo puedo mejorar?
Pero lo que realmente quieren de ti es probablemente esto:
def splice3(a, b, n):
res = []
for i in range(n):
res.append(a[i])
res.append(b)
for i in range(n, len(a)):
res.append(a[i])
return res
… que es muy feo.
Producen los mismos resultados, pero los dos primeros no necesitan almacenar todo el resultado en la memoria.
>>> "".join(splice("boom", "red", 2))
'boredom'
>>> "".join(splice2("boom", "red", 2))
'boredom'
>>> "".join(splice3("boom", "red", 2))
'boredom'