Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
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/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
2010/3/4 Pablo Angulo : > Olemis Lang (Simelix) escribió: >> No me parece que `index` recuerde el último índice de la lista (no >> estamos hablando de iteradores ;o) entre dos llamadas diferentes para >> recomenzar la búsqueda de un nuevo elemento (¿ o es que funciona así >> internamente ?) ... > Normalmente, index comienza desde el principio, pero justo por eso le > pasamos otro argumento más a index: > > ultimo = conjunto.index(v, ultimo+1) ¡ Caramba, ya sabía yo ! Tengo que cambiar mis espejuelos urgentemente ... :P -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
2010/3/4 Pablo Angulo : > Olemis Lang (Simelix) escribió: >> Si no es O(1) entonces sospecho que en >> >> {{{ >> #!python >> >> ultimo = -1 >> for v in subconjunto: >> ultimo = conjunto.index(v, ultimo+1) >> yield ultimo >> }}} >> >> hay un ciclo `for` explícito más un ciclo implícito `index` > > > No lo sospeches: tiene que haber un bucle para encontrar el índice, pero > en cuanto encuentras el primer índice con ese valor, te sales del bucle. > ¿Cuántas iteraciones haces del bucle en total? Bueno, puede que para > algún caso particular hagan falta muchas iteraciones, pero la suma de > todas las iteraciones no puede superar N: La primera iteración del bucle > "for v in subconjunto", recorres desde 0 hasta indice[0], luego desde > indice[1] hasta indice[2],... si sumas todas esas cantidades tienes: > > (indice[0] - 0) + (indice[1]-indice[0]) + ... + (indice[M-1] - > indice[M-2]) = indice[M-1] < N Tenía entendido que era así indice[0] + indice[1] + ... + indice[M-1] = sum(indice[i] for i in xrange(M)) <= N * (N + 1) / 2 - M * (M+ 1) / 2 peor caso cuando son los M últimos elementos del arreglo ;o) No me parece que `index` recuerde el último índice de la lista (no estamos hablando de iteradores ;o) entre dos llamadas diferentes para recomenzar la búsqueda de un nuevo elemento (¿ o es que funciona así internamente ?) ... Quizás es que no comprendí la parte del `- indice[0]` ... `- indice[M - 1]` La solución que presenté antes basada en itertools.count si funciona apróximadamente como se describe acá y por tanto resulta O(N) en el peor caso ;o) -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
2010/3/4 Pablo Angulo : > Kiko escribió: >> tiempo de la primera opción: 0.0149998664856 >> for i in subconjunto: >> ultimo = conjunto.index(i, ultimo+1) >> indices.append(ultimo) >> Los primero 25 valores de indices = [0, 3, 6, 9, 12, 15, 18, 21, 24, >> 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72] >> >> tiempo de mi opción, la original: 41.2180001736 >> indices1 = [conjunto.index(i) for i in subconjunto] >> Los primero 25 valores de indices1 = [0, 3, 6, 9, 12, 15, 18, 21, 24, >> 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72] >> >> tiempo de la tercera opción: 0.046313354 >> indices2 = [bisect.bisect(conjunto, i) for i in subconjunto] >> Los primero 25 valores de indices2 = [1, 4, 7, 10, 13, 16, 19, 22, 25, >> 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73] >> >> Menos mal que he preguntado a los expertos. >> >> Muchas gracias por las mejoras. Tanto la primera opción como la >> tercera son infinitamente mejores que la mía y aceptables en tiempo usado. > > Las mediciones de tiempo hay que tomarlas con cautela: si subconjunto es > mucho más pequeño que conjunto, entonces Mlog(N) es menor que N, y te > interesa usar el tercer método. Esto también es real. Por ejemplo, normalmente los algoritmos híbridos son los que se utilizan más frecuentemente. Por ejemplo, consideren lo siguiente [1]_ : {{{ In Java, the Arrays.sort() methods use merge sort or a tuned quicksort depending on the datatypes and for implementation efficiency switch to insertion sort when fewer than seven array elements are being sorted.[6] Python uses timsort, another tuned hybrid of merge sort and insertion sort. }}} FWIW ;o) .. [1] Comparison with other sort algorithms (http://en.wikipedia.org/wiki/Mergesort#Comparison_with_other_sort_algorithms) -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: Robots activos para Google Wave: introducción a la versión 2 de la API - http://feedproxy.google.com/~r/simelo-es/~3/ltPGNuqYzOM/google-wave-developer-blog-introducing.html ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
2010/3/4 Olemis Lang (Simelix) : > 2010/3/4 Pablo Angulo : >> Olemis Lang (Simelix) escribió: >>> Aquí por ejemplo hay un caso que ilustra el hecho de no confiar >>> demasiado en las estimaciones teóricas . Las estimaciones de Pablo et >>> al se pueden ver afectadas por la eficiencia de la implementación del >>> método index (el cual no me parece que sea muy O(1) que digamos, pero >>> no tengo los detalles en la mano ...) . E.g. si fuera O(n), O(log(n)) >>> ... en el peor caso entonces todos los análisis anteriores no serían >>> del todo precisos (CMIIW) >>> >> >> index no es O(1), sino que tarda tanto como tenga que buscar. Si tiene >> que recorrer toda la lista, será O(n). En este caso, el tiempo total es >> O(n) porque no se pasa dos veces por el mismo elemento de conjunto, AFAICS sí se hace esto dentro de `index` , ¿ o no ? Lo que el ciclo «no se ve» y por tanto está implícito (y es posible pasar por alto ese detalle ;o) CMIIW -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: Support micro-seconds as added by Trac in revision 9210 for upcoming 0.12... - http://bitbucket.org/osimons/trac-rpc-mq/changeset/62ffe719a84a/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
El 4 de marzo de 2010 17:33, Pablo Angulo escribió: > Kiko escribió: > > tiempo de la primera opción: 0.0149998664856 > > for i in subconjunto: > > ultimo = conjunto.index(i, ultimo+1) > > indices.append(ultimo) > > Los primero 25 valores de indices = [0, 3, 6, 9, 12, 15, 18, 21, 24, > > 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72] > > > > tiempo de mi opción, la original: 41.2180001736 > > indices1 = [conjunto.index(i) for i in subconjunto] > > Los primero 25 valores de indices1 = [0, 3, 6, 9, 12, 15, 18, 21, 24, > > 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72] > > > > tiempo de la tercera opción: 0.046313354 > > indices2 = [bisect.bisect(conjunto, i) for i in subconjunto] > > Los primero 25 valores de indices2 = [1, 4, 7, 10, 13, 16, 19, 22, 25, > > 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73] > > > > Menos mal que he preguntado a los expertos. > > > > Muchas gracias por las mejoras. Tanto la primera opción como la > > tercera son infinitamente mejores que la mía y aceptables en tiempo > usado. > Las mediciones de tiempo hay que tomarlas con cautela: si subconjunto es > mucho más pequeño que conjunto, entonces Mlog(N) es menor que N, y te > interesa usar el tercer método. > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > De acuerdo contigo. Pero con este ejercicio, lo que queda claro es que cualquiera de las dos propuestas es infinitamente mejor que la inicial (la mía) en tiempo de cálculo y ambas aceptables para lo que necesito ahora mismo. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
2010/3/4 Pablo Angulo : > Olemis Lang (Simelix) escribió: >> Aquí por ejemplo hay un caso que ilustra el hecho de no confiar >> demasiado en las estimaciones teóricas . Las estimaciones de Pablo et >> al se pueden ver afectadas por la eficiencia de la implementación del >> método index (el cual no me parece que sea muy O(1) que digamos, pero >> no tengo los detalles en la mano ...) . E.g. si fuera O(n), O(log(n)) >> ... en el peor caso entonces todos los análisis anteriores no serían >> del todo precisos (CMIIW) >> > > index no es O(1), sino que tarda tanto como tenga que buscar. Si tiene > que recorrer toda la lista, será O(n). En este caso, el tiempo total es > O(n) porque no se pasa dos veces por el mismo elemento de conjunto, pero > eso no significa que index sea O(1). Si no es O(1) entonces sospecho que en {{{ #!python ultimo = -1 for v in subconjunto: ultimo = conjunto.index(v, ultimo+1) yield ultimo }}} hay un ciclo `for` explícito más un ciclo implícito `index`, lo que me hace pensar que el desempeño en el peor caso puede ser O(M * N) y en el mejor sospecho que sea O(M^2), solo que hay una realidad, el ciclo implícito es mucho más eficiente pues está implementado directamente en (C)Python CMIIW ;o) -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: Support micro-seconds as added by Trac in revision 9210 for upcoming 0.12... - http://bitbucket.org/osimons/trac-rpc-mq/changeset/62ffe719a84a/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
2010/3/4 Kiko : > El 4 de marzo de 2010 16:27, Olemis Lang (Simelix) > escribió: >> 2010/3/4 Arnau Sanchez : >> > On 04/03/10 14:02, Pablo Angulo wrote: >> > > [...] > > tiempo de la tercera opción: 0.046313354 > indices2 = [bisect.bisect(conjunto, i) for i in subconjunto] > Los primero 25 valores de indices2 = [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, > 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73] > Evidentemente hay que ajustar este ;o) -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
El 4 de marzo de 2010 16:27, Olemis Lang (Simelix) > escribió: > 2010/3/4 Arnau Sanchez : > > On 04/03/10 14:02, Pablo Angulo wrote: > > > >> indices = [] > >> ultimo = 0 > >> for v in subconjunto: > >> ultimo += conjunto.index(v,ultimo) > >> indices.append(ultimo) > > > > Creo que el += sobra, list.index() devuelve el índice absoluto: > > > > ultimo = conjunto.index(v, ultimo) > > > > Y si no me equivoco el índice podría ser ultimo+1. Con tu propuesta, y > > usando generadores queda realmente simple: > > > > ultimo = -1 > > for v in subconjunto: > > ultimo = conjunto.index(v, ultimo+1) > > yield ultimo > > Aquí por ejemplo hay un caso que ilustra el hecho de no confiar > demasiado en las estimaciones teóricas . Las estimaciones de Pablo et > al se pueden ver afectadas por la eficiencia de la implementación del > método index (el cual no me parece que sea muy O(1) que digamos, pero > no tengo los detalles en la mano ...) . E.g. si fuera O(n), O(log(n)) > ... en el peor caso entonces todos los análisis anteriores no serían > del todo precisos (CMIIW) > > PD: JFYI, la implementación que envié anteriormente no sufre de este > potencial problema (de todas formas sería bueno saber si `index` es > O(1) o no ;o) > > -- > Regards, > > Olemis > Después de leeros a todos (muchas gracias, Juan Ignacio, Daniel, Pablo, Olemis y Arnau) he hecho unas pruebas para un caso que se acerca a lo que necesito: from datetime import datetime, timedelta import bisect import time def generador(start, end, intervalo): fechas = [] while start <= end: fechas.append(start) start += timedelta(minutes=intervalo) return [valores for valores in fechas] start = datetime(1900,1,1,0,0) end = datetime(1901,1,1,0,0) conjunto = generador(start, end, 10) subconjunto = generador (start, end, 30) t0 = time.time() indices = [] ultimo = -1 for i in subconjunto: ultimo = conjunto.index(i, ultimo+1) indices.append(ultimo) #yield ultimo print time.time() - t0 print indices[0:25] t0 = time.time() indices1 = [conjunto.index(i) for i in subconjunto] print time.time() - t0 print indices1[0:25] t0 = time.time() indices2 = [bisect.bisect(conjunto, i) for i in subconjunto] print time.time() - t0 print indices2[0:25] El yield me da error tal como lo he puesto ¿?. Las salidas que obtengo son: tiempo de la primera opción: 0.0149998664856 for i in subconjunto: ultimo = conjunto.index(i, ultimo+1) indices.append(ultimo) Los primero 25 valores de indices = [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72] tiempo de mi opción, la original: 41.2180001736 indices1 = [conjunto.index(i) for i in subconjunto] Los primero 25 valores de indices1 = [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72] tiempo de la tercera opción: 0.046313354 indices2 = [bisect.bisect(conjunto, i) for i in subconjunto] Los primero 25 valores de indices2 = [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61, 64, 67, 70, 73] Menos mal que he preguntado a los expertos. Muchas gracias por las mejoras. Tanto la primera opción como la tercera son infinitamente mejores que la mía y aceptables en tiempo usado. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
2010/3/4 Arnau Sanchez : > On 04/03/10 14:02, Pablo Angulo wrote: > >> indices = [] >> ultimo = 0 >> for v in subconjunto: >> ultimo += conjunto.index(v,ultimo) >> indices.append(ultimo) > > Creo que el += sobra, list.index() devuelve el índice absoluto: > > ultimo = conjunto.index(v, ultimo) > > Y si no me equivoco el índice podría ser ultimo+1. Con tu propuesta, y > usando generadores queda realmente simple: > > ultimo = -1 > for v in subconjunto: > ultimo = conjunto.index(v, ultimo+1) > yield ultimo Aquí por ejemplo hay un caso que ilustra el hecho de no confiar demasiado en las estimaciones teóricas . Las estimaciones de Pablo et al se pueden ver afectadas por la eficiencia de la implementación del método index (el cual no me parece que sea muy O(1) que digamos, pero no tengo los detalles en la mano ...) . E.g. si fuera O(n), O(log(n)) ... en el peor caso entonces todos los análisis anteriores no serían del todo precisos (CMIIW) PD: JFYI, la implementación que envié anteriormente no sufre de este potencial problema (de todas formas sería bueno saber si `index` es O(1) o no ;o) -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: Robots activos para Google Wave: introducción a la versión 2 de la API - http://feedproxy.google.com/~r/simelo-es/~3/ltPGNuqYzOM/google-wave-developer-blog-introducing.html ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
On 04/03/10 14:02, Pablo Angulo wrote: indices = [] ultimo = 0 for v in subconjunto: ultimo += conjunto.index(v,ultimo) indices.append(ultimo) Creo que el += sobra, list.index() devuelve el índice absoluto: ultimo = conjunto.index(v, ultimo) Y si no me equivoco el índice podría ser ultimo+1. Con tu propuesta, y usando generadores queda realmente simple: ultimo = -1 for v in subconjunto: ultimo = conjunto.index(v, ultimo+1) yield ultimo ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
2010/3/4 Olemis Lang (Simelix) : > 2010/3/4 Pablo Angulo : >> Daniel Garcia Moreno escribió: > [...] > se puede lograr más aún si se sabe que una lista es un > subelemento de la otra Precisión: subconjunto -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: Comienza la era de la televisión 3D (el 10 de marzo ;o) - http://feedproxy.google.com/~r/simelo-es/~3/mPcmLbduWJU/despues-del-gran-exito-del-largometraje.html ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
2010/3/4 Pablo Angulo : > Daniel Garcia Moreno escribió: >> >>> Si la lista grande tiene N elementos y la pequeña M, puedes elegir entre >>> O(Mlog(N)), usando bisect. o O(N), con la técnica que te decía antes. >>> >> O puedes combinar las dos, buscar desde el último indice en adelante >> pero hacerlo con busqueda binaria. > Yo diría que ésto es también es O(M log(N)) en el peor caso (cuando el > subconjunto son los M primeros valores de conjunto) > > log(N)+log(N-1)+...+log(N-M)=O(M log(N)) Por las características del problema y del contexto (dos listas ordenadas ;o) me parece que lo más adecuado en este caso es un algoritmo de mezcla como MergeSort [1]_ [2]_ que AFAICR debe ser O(n log(n)) siendo n = min(N, M) en el peor caso, pero O(n) si están ordenados (para más detalles consulten los enlaces ;o). Realmente en este caso ni siquiera hace falta el mergesort completo, solo la función de mezcla y simplificada , lo cual resultaría más eficiente todavía, se puede lograr más aún si se sabe que una lista es un subelemento de la otra -pero todas esas quedan de tarea para el OP- ;o) {{{ #!python >>> conjunto = range(1000, 1100, 1) >>> subconjunto = range(1000, 1100, 3) >>> from itertools import count >>> def setidx(sub, full): # a.k.a merge() ... idxs = count() ... while sub and full : ... if sub[0] == full[0] : ... yield idxs.next() ... full.pop(0); sub.pop(0) ... elif sub[0] < full[0] : ... sub.pop(0) ... else : ... full.pop(0) ... idxs.next() ... >>> list(setidx(subconjunto, conjunto)) [0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99] }}} Uso de memoria adicional ~= 0 .. [1] MergeSort (http://en.wikipedia.org/wiki/Mergesort) .. [2] Ordenamiento por mezcla (http://es.wikipedia.org/wiki/Ordenamiento_por_mezcla) PD: De todas formas mi sugerencia muy particular es que no confíen demasiado en los análisis teóricos del tipo mencionado por Pablo (o mejor dicho, que desconfíen hasta que no tengan la seguridad irrefutable que les da un profiler ;o) . Este hilo me ha recordado un artículo que tengo pendiente para mi blog que ilustra esto muy bien (y que resulta realmente sorprendente, créanme ;o). Trataré de publicarlo mañana (o pasado, o ...), y así tendrán más argumentos para juzgar ustedes por su cuenta Y para terminar, los algs de mezcla tienden a ser más fácilmente paralelizables y trabajan mejor con medios secuenciales, por lo que si la cantidad de datos es *REALMENTE* grande entonces pueden resultar bastante atractivos , pues tienden además a tener la virtud de ser estables ... bueno y si de algo sirve, pues, no contaminan el medio ambiente, ¿ vale ? :P ) ;o) -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: Comienza la era de la televisión 3D (el 10 de marzo ;o) - http://feedproxy.google.com/~r/simelo-es/~3/mPcmLbduWJU/despues-del-gran-exito-del-largometraje.html ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
El 4 de marzo de 2010 13:18, Juan Ignacio escribió: > Oppps, me falto la interrogante, era una pregunta :-) ¿Conjunto y > subconjunto están (o pueden estar) ordenados? > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > Están ordenados para lo que quiero hacer. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
Oppps, me falto la interrogante, era una pregunta :-) ¿Conjunto y subconjunto están (o pueden estar) ordenados? ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
Conjunto y subconjunto están (o pueden estar) ordenados 2010/3/4 Kiko : > Hola a todos. > > Estoy intentando buscar los indices de un subconjunto dentro de un conjunto > y quiero saber si existe algo más eficiente que lo que he pensado. > > Me explico, por ejemplo, yo tengo: > > conjunto = range(1000, 1100, 1) > subconjunto = range(1000, 1100, 3) > > Quiero saber la posición que tendría cada valor del subconjunto en el > conjunto, es decir, subconjunto[0] tendría el índice 0 en conjunto > (conjunto[0])), subconjunto[1] tendría el índice 3 en conjunto > (conjunto[3])) y así. > > Estoy obteniendo los índices así > indices = [conjunto.index(valor) for valor in subconjunto] > > Pero si conjunto y subconjunto son muy grandes se toma su tiempo. > > ¿Existe una forma más eficiente de obtener los índices? > > Muchas gracias a todos. > > > > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > -- Juan Ignacio Rodríguez de León Movil: 605 890514 E-Mail: euriba...@gmail.com http://elornitorrincoenmascarado.blogspot.com/ http://descon2.com/ ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/