El lun, 09-05-2011 a las 04:49 +0200, lasizoillo escribió: > El día 9 de mayo de 2011 00:17, lopz <lowlife...@gmail.com> escribió: > > Hola, estoy haciendo unas pequeñas pruebas en pygame
> > def compare(tags1, tags2): > > for i in tags1.split(' '): > > for j in tags2.split(' '): > > if (i == j): > > return True > > return False > Puestos a hacer optimizaciones, ¿no te parece un poco ineficiente > hacer el split para convertir la cadena de los tags a una lista una y > otra vez en la función compare? Pero bueno, tampoco hay que ponerse > estricto ahí, a mi usar un set para almacenar los tags me parecería > apropiado. En vez del bucle anidado de la función compare, la cosa se > podría quedar en: > if set_a & set_b: > trazar_linea(a, b) > > Esta última propuesta no sería la más óptima en rendimiento. > Necesitaría extraer la unión de los dos conjuntos y no se detendría al > encontrar el primero en común. Pero me gusta porque es bastante > concisa y legible. Aunque siempre se puede seguir usando los bucles > anidados con las listas, que tambien son iterables. > > Saludos: > > Javi Yo usaría diccionarios, que ya están optimizados para buscar los índices, por lo que sólo sería necesario iterar sobre uno de ellos hasta encontrar coincidencia. Sean tags1 y tags2 así tags1 = {'word1':true, word2':true....} def compare(tags1, tags2): for key in tags1: if key in tags2: return True return False Ahora para no tener que tocar el resto del código, sean tags1 y tags2 asi tags1 = 'word1 word2 ...' def compare(tags1, tags2): tags1 = dict([(tag,True) for tag in tags1.split(' ')]) tags2 = dict([(tag,True) for tag in tags2.split(' ')]) for key in tags1: if key in tags2: return True return False _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/