On 04/03/10 16:43, Kiko wrote:
indices = []
ultimo = -1
for i in subconjunto:
ultimo = conjunto.index(i, ultimo+1)
indices.append(ultimo)
#yield ultimo
El yield me da error tal como lo he puesto ¿?.
Claro, un "yield" sólo funciona dentro de un generador. Supongo que nunca has
trabajado con ellos, busca información por google, por ejemplo:
http://docs.python.org.ar/tutorial/classes.html#generadores
De verdad que vale la pena, los generadores son una de las herramientas más
potentes de Python. Para crear un generator tendrás que definirlo (también con
"def", aunque no es una función). En nuestro ejemplo:
def gen():
ultimo = -1
for v in subgroup:
ultimo = group.index(v, ultimo+1)
yield ultimo
Si haces gen() verás que devuelve (inmediatamente, ya que no lo ha ejecutado
todavía) un objeto generador, no una lista; siempre puedes obtener el resultado
completo en forma de lista, así: list(gen()). Pero muchas veces uno no quiere
tener toda la lista, sólo iterar (una vez) sobre el resultado. En ese caso:
for item in gen():
# hacer algo con item
Por último: Daniel proponía usar bisect; con la misma idea, y refactorizando un
pelín, quedaría así:
def get_positions(group, subgroup):
index = 0
for element in subgroup:
index = bisect.bisect(group, element, index)
yield index-1
arnau
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/