Re: [Python-es] PYSQLITE: Cómo saber los nombres d e todas las tablas que contenga una base sqlite
Puedes usar la tabla sqlite_master: select name from SQLite_Master 2010/3/5 Ramiro > Como el título dice, quisiera saber cómo pedir los nombres de las tablas > que contenga una base de datos sqlite > > La verdad no entiendo la documentación de la librería sqlite3, me pasé > horas buscando y no encontré la solución. > > También si me podrían pasar el lugar de la documentación donde habla de eso > les agradecería, así me ubico de una vez. > > > saludos > > > > -- > > Encontra las mejores recetas con Yahoo! Cocina. > http://ar.mujer.yahoo.com/cocina/ > > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
[Python-es] PYSQLITE: Cómo saber los nombres d e todas las tablas que contenga una base sqlite
Como el título dice, quisiera saber cómo pedir los nombres de las tablas que contenga una base de datos sqlite La verdad no entiendo la documentación de la librería sqlite3, me pasé horas buscando y no encontré la solución. También si me podrían pasar el lugar de la documentación donde habla de eso les agradecería, así me ubico de una vez. saludos Yahoo! Cocina Encontra las mejores recetas con Yahoo! Cocina. http://ar.mujer.yahoo.com/cocina/___ 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] Como saber el tipo de columna en una base de datos SQLITE
Pude hacer andar la solución que me pasaste Chema Cortes, gracias por la mano que me tiraste. Dejo un ejemplo: #!/usr/bin/python import gtk, pygtk import sqlite3 as sql bbdd = sql.connect('datos.bd') cur = bbdd.cursor() cur.execute("pragma table_info('TABLA_1')") r = cur.fetchall() for columna in r: print columna cur.close() bbdd.close() SALUDOS --- El sáb 6-feb-10, Chema Cortes escribió: De: Chema Cortes Asunto: Re: [Python-es] Como saber el tipo de columna en una base de datos SQLITE Para: "La lista de python en castellano" Fecha: sábado, 6 de febrero de 2010, 1:55 El 5 de febrero de 2010 02:17, Ramiro escribió: > Yo utilizo cursor.description para conocer los nombres de las columnas. Lo > malo de eso es que no puede estar vaacía la base. > Pero de los tipos de cada columna ni idea de como sacarla, en la > documentación que aparece sobre la librería sqlite3 de python no muestra nada > sobre como sacar los tipos de datos. Si entiendo bien, el problema es que pysqlite no da más información en el cursor.description que el nombre de los campos (el resto de información se rellena con Nones). Tendrás que usar entonces el segundo método que te indiqué: cur.execute("pragma table_info('tabla')") Por cada campo devuelve una tupla con: - número de orden - nombre del campo - tipo (con el que se ha definido la tabla) - nullable (0/1) - valor por defecto - clave primaria (0/1) A partir de la definición de la tabla, se siguen una sencillas reglas para sacar la afinidades a partir del nombre del tipo (mira en la documentación). ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ Encontra las mejores recetas con Yahoo! Cocina. http://ar.mujer.yahoo.com/cocina/ -Adjunto en línea a continuación- ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ Yahoo! Cocina Encontra las mejores recetas con Yahoo! Cocina. http://ar.mujer.yahoo.com/cocina/___ 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] Como saber el tipo de columna en una base de datos SQLITE
Pude hacer andar la solución que me pasaste Chema Cortes, gracias por la mano que me tiraste. Dejo un ejemplo: #!/usr/bin/python import gtk, pygtk import sqlite3 as sql bbdd = sql.connect('datos.bd') cur = bbdd.cursor() cur.execute("pragma table_info('TABLA_1')") r = cur.fetchall() for columna in r: print columna cur.close() bbdd.close() SALUDOS --- El sáb 6-feb-10, Chema Cortes escribió: De: Chema Cortes Asunto: Re: [Python-es] Como saber el tipo de columna en una base de datos SQLITE Para: "La lista de python en castellano" Fecha: sábado, 6 de febrero de 2010, 1:55 El 5 de febrero de 2010 02:17, Ramiro escribió: > Yo utilizo cursor.description para conocer los nombres de las columnas. Lo > malo de eso es que no puede estar vaacía la base. > Pero de los tipos de cada columna ni idea de como sacarla, en la > documentación que aparece sobre la librería sqlite3 de python no muestra nada > sobre como sacar los tipos de datos. Si entiendo bien, el problema es que pysqlite no da más información en el cursor.description que el nombre de los campos (el resto de información se rellena con Nones). Tendrás que usar entonces el segundo método que te indiqué: cur.execute("pragma table_info('tabla')") Por cada campo devuelve una tupla con: - número de orden - nombre del campo - tipo (con el que se ha definido la tabla) - nullable (0/1) - valor por defecto - clave primaria (0/1) A partir de la definición de la tabla, se siguen una sencillas reglas para sacar la afinidades a partir del nombre del tipo (mira en la documentación). ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ Yahoo! Cocina Encontra las mejores recetas con Yahoo! Cocina. http://ar.mujer.yahoo.com/cocina/___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
[Python-es] Precisión sobre funciones generadora s en Py WAS: Buscar índices de un array (que cumple condición) de forma eficiente
2010/3/4 Arnau Sanchez : > On 04/03/10 16:43, Kiko wrote: > [...] > > De verdad que vale la pena, los generadores son una de las herramientas más > potentes de Python. +1 > Para crear un generator tendrás que definirlo (también > con "def", aunque no es una función). Sí es una función, pero que se crea con tiene un flag especial . Cuando el intérprete la ejecuta, crea automáticamente un objeto que llama la función para calcular valores de una secuencia AFAIK ejemplo sencillo, los números naturales {{{ #!python def count(): i = 0 while True : yield i i+= 1 }}} -- 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
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] OT py2exe y windows XP
El Mon, 15 Feb 2010 16:13:20 -0500 Manuel Alejandro Cerón Estrada dijo: > Hola. Hola todos. > > El día 15 de febrero de 2010 15:53, Dr. Bobus escribió: > > Hola todos: > > > > No se si es muy correcto enviar este mensaje a esta lista, pero quería > > saber si puede alguien ayudarme. > > > > Un amigo me ha pedido un pequeño script para transformar unos ficheros > > antiguos dbf a algo que pueda usar (csv). > > > > El script lo he hecho usando el paquete dbf de Ethan Furman (ver 0.84.18) > > [1]. Abro los ficheros, realizo las transformaciones que me pidió y lo > > grabo en csv. > > > > El asunto funciona tan ricamente, pero mi amigo usa windows y no tiene > > python instalado. La cosa es que le "compilé" el script con py2exe. > > > > Tras "compilarlo" lo he probado en varias instalaciones windows que tengo a > > mano (Windows 2000, windows XP y Windows 7) y funciona perfecto. Sin > > embargo, a él no le funciona (usa windows XP último service Pack). Me > > comenta que al ejecutarlo le dice: > > > > "no se pudo iniciar la aplicacion porque su configuracion es incorrecta. > > Reinstalar aplicacion puede solucionar el problema." > > > > La verdad es que el programa no necesita ninguna instalación ni > > configuración, copiarlo en una carpeta, poner en ella los ficheros a > > transformar y darle doble clic. Así funciona en todas las pruebas que he > > hecho. No se precisan permisos de administrador ni nada por el estilo. El > > programa no hace nada más que abrir y cerrar ficheros. Donde lo he probado > > lo he ejecutado como usuario normal. > > > > He estado mirando en Google y sólo he encontrado una entrada que no me > > resuelve nada. No tengo ni idea de lo que esta diciendo Windows. > > > > Las opciones para la generación en py2exe fueron: > > "py2exe":{ > > "unbuffered": True, > > "optimize": 2, > > "excludes": ["pywin", "pywin.debugger", "pywin.debugger.dbgcon", > > "pywin.dialogs", "pywin.dialogs.list", > > "Tkconstants","Tkinter","tcl" > > ] > > } > > > > Esto lo hice en una instalación de Python 2.6.4 usando las librerias > > estandar salvo la comentada para manejar ficheros dbf. > > > > > > Alguna ayuda? > > Tu problema ocurre porque los binarios oficiales de Python 2.6 para > Windows son compilados con MS Visual C++ 9 y por lo tanto dependen de > una biblioteca llamada 'msvcr90.dll'. En tus instalaciones de Windows > el programa funciona bien porque probablemente ya tengas una > aplicación que use esta biblioteca y la haya instalado en tu sistema. > El mismo Python 2.6 instala esta biblioteca. > > Ahora la solución es sencilla: tienes que distribuir tu programa junto > con la librería 'msvcr90.dll' y el archivo manifiesto > 'Microsoft.VC90.CRT.manifest'. Estos archivos deben estar en algún > lugar de tu disco duro, pero si quieres conseguirlos fácilmente, > instala Python 2.6 en modo "Sólo para este usuario" y te aparecerán en > la carpeta C:\Python26 o dónde lo hayas instalado. Muchas gracias con retraso, hice como se comenta en esta receta y efectivamente funciona. Ese era el problema. Realicé una instalación de windows "fresca" en Virtual Box y efectivamente el programa no funcionaba y pude reproducir el error. Al instalar el MS Visual C++ 9 que instala la librería que tu comentas el programa ya funcionaba. No he contestado antes a la lista pues mi amigo tardo "un poco" en probar la solución. Instaló la librería y el script ya le funciona. Saludos y gracias. Dr. Bobus -- "...[Linux's] capacity to talk via any medium except smoke signals." (By Dr. Greg Wettstein, Roger Maris Cancer Center) signature.asc Description: PGP signature ___ 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 cump le condición) de forma eficiente
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) ___ 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 cump le condición) de forma eficiente
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 ___ 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 cump le condición) de forma eficiente
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/
Re: [Python-es] Buscar índices de un array (que cump le condición) de forma eficiente
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). ___ 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 cump le condición) de forma eficiente
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)) ___ 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 cump le condición) de forma eficiente
Pablo Angulo escribió: > indices = [] > ultimo = 0 > for v in subconjunto: > ultimo += conjunto[ultimo:].index(v) > indices.append(ultimo) > > [conjunto[j] for j in indices]==subconjunto > > Lamento ser pesado, pero hay que hacer un cambio: indices = [] ultimo = 0 for v in subconjunto: ultimo += conjunto.index(v,ultimo) indices.append(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 cump le condición) de forma eficiente
2010/3/4 Pablo Angulo : > Daniel Garcia Moreno escribió: >> >> Según mis conocimientos en computación, esta búsqueda es de orden n^2. >> Si el primer conjunto está ordenado, puede llegar a ser de orden >> n*log(n) puesto que puedes hacer una búsqueda binaria en lugar de >> conjunto.index(valor). Y creo que no vas a poder optimizar más por >> ahí, porque la complejidad del problema es esa. >> > 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. ___ 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 cump le condición) de forma eficiente
Daniel Garcia Moreno escribió: > > Según mis conocimientos en computación, esta búsqueda es de orden n^2. > Si el primer conjunto está ordenado, puede llegar a ser de orden > n*log(n) puesto que puedes hacer una búsqueda binaria en lugar de > conjunto.index(valor). Y creo que no vas a poder optimizar más por > ahí, porque la complejidad del problema es esa. > 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. ___ 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 cump le condición) de forma eficiente
Te escribo a tí directamente porque la lista parece que no me acepta!! Si los elementos de subconjunto están ordenados dentro de conjunto, la búsqueda es O(n): si sabes que los elementos del subconjunto están ordenados dentro del conjunto, no necesitas buscar en toda la lista cada vez, sino sólo desde la última búsqueda indices = [] ultimo = 0 for v in subconjunto: ultimo += conjunto[ultimo:].index(v) indices.append(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 cump le condición) de forma eficiente
Kiko escribió: > 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? si sabes que los elementos del subconjunto están ordenados dentro del conjunto, no necesitas buscar en toda la lista cada vez, sino sólo desde la última búsqueda indices = [] ultimo = 0 for v in subconjunto: ultimo += conjunto[ultimo:].index(v) indices.append(ultimo) [conjunto[j] for j in indices]==subconjunto > True También te puede interesar usar conjuntos, si no necesitas el orden de los elementos. Un saludo ___ 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 cump le condición) de forma eficiente
2010/3/4 Kiko : > > 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? > > Están ordenados para lo que quiero hacer. > Pues entonces puedes usar bisect en lugar de index: import bisect indices = [bisect.bisect(conjunto, valor) for valor in subconjunto] ___ 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 cump le condición) de forma eficiente
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. > Según mis conocimientos en computación, esta búsqueda es de orden n^2. Si el primer conjunto está ordenado, puede llegar a ser de orden n*log(n) puesto que puedes hacer una búsqueda binaria en lugar de conjunto.index(valor). Y creo que no vas a poder optimizar más por ahí, porque la complejidad del problema es esa. ___ 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/
[Python-es] Buscar índices de un array (que cu mple condición) de forma eficiente
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/
Re: [Python-es] Resumen de Python-es, Vol 3, Env ío 5
+1 a desactivar la opción. La misma funcionalidad puede conseguirse con un filtro en el cliente de correo. -- ## ### Jordi Funollet ### http://www.terraquis.net ___ 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] Resumen de Python-es, Vol 3, Envío 5
El 3 de marzo de 2010 20:21, d1d4c escribió: > Hola. > > Arnau Sanchez escribió: > .../ > > No tengo experiencia con el modo digest pero imagino que habrá alguna >> forma de responder manteniendo el hilo (lo que incluye el asunto, pero >> también headers como el In-Reply-To). >> > > El modo digest sólo puede servirle (si es que puede llegar a servir de > algo) a quien no pretenda escribir, sólo leer. > > En mi opinión, quien se suscribe a una lista y selecciona el modo digest, > es simplemente porque cae en la trampa. Deberíamos editar el texto html de > esa página y explicar eso, que con ese modo no se puede participar, sólo > leer. > > Porque para poder poner el header y el In-Reply-To correspondientes, antes > has de saber cuáles son, y eso no sale ni en el digest ni en ninguno de los > archivos web, que yo sepa. > > En mi opinión, esa opción se debería quitar de mailman 'in secula > seculorum'. No entiendo qué hace todavía allí. > > Como le dije ya en un privado (también), en mi opinión, lo mejor que > Andreina puede hacer respecto a este tema, es ir a sus preferencias de > suscripción y cambiar eso. No hay más, cayó en la trampa del modo digest. > > > Saludos. > > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > +1 A favor de eliminar el modo digest. Saludos jlt ___ 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] [web] python-es.org
Yo no me había pronunciado aún pero si puedo ayudar en algo me lo decís. Antecedentes: Novato en python Novato en numpy Novato en MatPlotLib Novato en wxpython No he tocado Django en mi vida pero tengo intención. Sé traer cafés a quien haga falta ;-P Tengo muchas ganas de aprender de todo. Saludos. ___ 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] MODO DIGEST (era: Re: Resumen de Pyth on-es, Vol 3, Envío 5)
El día 4 de marzo de 2010 10:00, d1d4c escribió: > Francisco Javier Cuadrado escribió: >> >> El día 4 de marzo de 2010 09:05, Francesc Alted >> escribió: > > .../ >>> >>> Bueno, de decir que sólo sirve para leer a que no tiene sentido, hay un >>> trecho. Yo prefiero que se le diga a la gente de manera cordial (com en >>> el >>> caso anterior) que mejor subscribirse en modo 'normal'. >> >> Estoy con Francesc. >> >> Además yo creo que el modo digest se puede usar bien, si cuando vas a >> contestar al correo, te bajas el hilo antes y contestas a >> continuación. > > Sólo por curiosidad ¿cómo es eso de bajarte el hilo? ¿cómo se puede hacer? > ahora no lo veo... :/ > La verdad es que yo tampoco, se me ha olvidado decir que ese uso lo sé de oídas, yo nunca he usado el digest, pero siempre he tenido entendido que ese era el uso que se debía hacer. He buscado un poco y he encontrado esto[1], citando: IX. For the same reasons, when you get the list in digest form, edit the subject line of the list you are replying to into your subject. "re: Digest Night of January 16th" isn't very specific. Or use a mail reader that will "burst" digests into their component emails for you, like Emacs's rmail mode. Some lists make their digests available in MIME form. MIME format allows you to get the subject and threading right. > Gracias, estoy intrigado :) Espero que te sirva. > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > [1] http://www.charlescurley.com/netiquette.html -- Saludos Fran ___ 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] Duda con expresiones regulares
On 03/04/2010 04:05 AM, Juan Ignacio wrote: On 03/04/2010 03:53 AM, Francisco Javier Cuadrado wrote: mayúsculas seguidas por minusculas y esto se puede repetir solamente dos Creo que seria "dos o más veces", no "solamente dos". Toda la razón, verificado en el sitio y en la documentación de python. Decididamente no se me dan bien, hay que ponerlo en mi TODO. ___ 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] Duda con expresiones regulares
2010/3/4 Juan Ignacio : >> On 03/04/2010 03:53 AM, Francisco Javier Cuadrado wrote: >> mayúsculas seguidas por minusculas y esto se puede repetir solamente dos > > Creo que seria "dos o más veces", no "solamente dos". Cierto, hoy estoy espeso. > -- > 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/ > -- Saludos Fran ___ 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] Duda con expresiones regulares
On 03/04/2010 04:05 AM, Francisco Javier Cuadrado wrote: El día 4 de marzo de 2010 09:59, José Jorge Lorenzo Vila escribió: On 03/04/2010 03:53 AM, Francisco Javier Cuadrado wrote: El día 4 de marzo de 2010 09:43, José Jorge Lorenzo Vila escribió: Hola lista, Hola. Siguiendo las indicaciones he instalado django-wikiapp, La duda es que tengo problemas con las expresiones regulares y el problema radica en que por omisión, el título de los artículos en la wiki se valida contra la siguiente expresión regular. Alguien me podría decir que patrón es el que se está definiendo aquí? Me imagino que no debería ser tan restrictivo, pero por alguna razón no me machea nada. WIKI_WORD_RE = r'(?:[A-Z]+[a-z]+){2,}' wikiword_pattern = re.compile('^' + WIKI_WORD_RE + '$') No estoy muy seguro, nunca se me han dado demasiado bien, pero mirando la página de la wikipedia sobre expresiones regulares[1], creo que es una palabra que debe empezar con una mayúscula, seguida de cero o más mayúsculas, a la que debe seguir una letra minúscula, seguida de cero o más minúsculas, y la palabra debe tener como mínimo una longitud de dos letras. Como te digo no estoy seguro, que alguien lo confirme o me corrija. Gracias [1] http://es.wikipedia.org/wiki/Expresiones_regulares ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ Bueno, me había dado casi por vencido, pero viendo lo que me recomendabas, me animé otra vez. Resulta que JoseJorge machea, Jose no JoseJno JoseJorgeLono Por lo que me parece estar viendo el patrón siguiente: Tiene que haber mayúsculas seguidas por minusculas y esto se puede repetir solamente dos veces. Sí, es lo que comentas, porque me he equivocado al decir que como mínimo tenía que tener dos caracteres de longitud, ya que las llaves (que indican la longitud) se aplican al bloque de letras mayúsculas seguidas de minúsculas, por lo que sería una palabra formada de letras mayúsculas (1 a n) seguidas de minúsculas (1 a n) y este conjunto de letras se debe repetir dos veces, es decir algo así: MmMm (siendo M letras mayúsculas y m letras minúsculas). saludos y muchas gracias ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ Exactamente, muchas gracias. Ahora solo me queda quitarle los {} porque me parece muy restrictivo. Muchas gracias lista y en especial Francisco. ___ 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] MODO DIGEST (era: Re: Resumen de Python-es, Vol 3, Envío 5)
Francisco Javier Cuadrado escribió: El día 4 de marzo de 2010 09:05, Francesc Alted escribió: .../ Bueno, de decir que sólo sirve para leer a que no tiene sentido, hay un trecho. Yo prefiero que se le diga a la gente de manera cordial (com en el caso anterior) que mejor subscribirse en modo 'normal'. Estoy con Francesc. Además yo creo que el modo digest se puede usar bien, si cuando vas a contestar al correo, te bajas el hilo antes y contestas a continuación. Sólo por curiosidad ¿cómo es eso de bajarte el hilo? ¿cómo se puede hacer? ahora no lo veo... :/ Gracias, estoy intrigado :) ___ 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] Duda con expresiones regulares
> On 03/04/2010 03:53 AM, Francisco Javier Cuadrado wrote: > mayúsculas seguidas por minusculas y esto se puede repetir solamente dos Creo que seria "dos o más veces", no "solamente dos". -- 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/
Re: [Python-es] Duda con expresiones regulares
El día 4 de marzo de 2010 09:59, José Jorge Lorenzo Vila escribió: > On 03/04/2010 03:53 AM, Francisco Javier Cuadrado wrote: >> >> El día 4 de marzo de 2010 09:43, José Jorge Lorenzo Vila >> escribió: >> >>> >>> Hola lista, >>> >> >> Hola. >> >> >>> >>> Siguiendo las indicaciones he instalado django-wikiapp, >>> La duda es que tengo problemas con las expresiones regulares y el >>> problema >>> radica en que por omisión, el título de los artículos en la wiki se >>> valida >>> contra la siguiente expresión regular. >>> Alguien me podría decir que patrón es el que se está definiendo aquí? >>> Me imagino que no debería ser tan restrictivo, pero por alguna razón no >>> me >>> machea nada. >>> >>> WIKI_WORD_RE = r'(?:[A-Z]+[a-z]+){2,}' >>> wikiword_pattern = re.compile('^' + WIKI_WORD_RE + '$') >>> >>> >> >> No estoy muy seguro, nunca se me han dado demasiado bien, pero mirando >> la página de la wikipedia sobre expresiones regulares[1], creo que es >> una palabra que debe empezar con una mayúscula, seguida de cero o más >> mayúsculas, a la que debe seguir una letra minúscula, seguida de cero >> o más minúsculas, y la palabra debe tener como mínimo una longitud de >> dos letras. >> >> Como te digo no estoy seguro, que alguien lo confirme o me corrija. >> >> >>> >>> Gracias >>> >> >> [1] http://es.wikipedia.org/wiki/Expresiones_regulares >> >> >>> >>> ___ >>> Python-es mailing list >>> Python-es@python.org >>> http://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >>> >>> >> >> >> > > Bueno, me había dado casi por vencido, pero viendo lo que me recomendabas, > me animé otra vez. > Resulta que > JoseJorge machea, > Jose no > JoseJ no > JoseJorgeLo no > > Por lo que me parece estar viendo el patrón siguiente: Tiene que haber > mayúsculas seguidas por minusculas y esto se puede repetir solamente dos > veces. > Sí, es lo que comentas, porque me he equivocado al decir que como mínimo tenía que tener dos caracteres de longitud, ya que las llaves (que indican la longitud) se aplican al bloque de letras mayúsculas seguidas de minúsculas, por lo que sería una palabra formada de letras mayúsculas (1 a n) seguidas de minúsculas (1 a n) y este conjunto de letras se debe repetir dos veces, es decir algo así: MmMm (siendo M letras mayúsculas y m letras minúsculas). > saludos y muchas gracias > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > -- Saludos Fran ___ 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] Duda con expresiones regulares
On 03/04/2010 03:53 AM, Francisco Javier Cuadrado wrote: El día 4 de marzo de 2010 09:43, José Jorge Lorenzo Vila escribió: Hola lista, Hola. Siguiendo las indicaciones he instalado django-wikiapp, La duda es que tengo problemas con las expresiones regulares y el problema radica en que por omisión, el título de los artículos en la wiki se valida contra la siguiente expresión regular. Alguien me podría decir que patrón es el que se está definiendo aquí? Me imagino que no debería ser tan restrictivo, pero por alguna razón no me machea nada. WIKI_WORD_RE = r'(?:[A-Z]+[a-z]+){2,}' wikiword_pattern = re.compile('^' + WIKI_WORD_RE + '$') No estoy muy seguro, nunca se me han dado demasiado bien, pero mirando la página de la wikipedia sobre expresiones regulares[1], creo que es una palabra que debe empezar con una mayúscula, seguida de cero o más mayúsculas, a la que debe seguir una letra minúscula, seguida de cero o más minúsculas, y la palabra debe tener como mínimo una longitud de dos letras. Como te digo no estoy seguro, que alguien lo confirme o me corrija. Gracias [1] http://es.wikipedia.org/wiki/Expresiones_regulares ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ Bueno, me había dado casi por vencido, pero viendo lo que me recomendabas, me animé otra vez. Resulta que JoseJorge machea, Jose no JoseJno JoseJorgeLono Por lo que me parece estar viendo el patrón siguiente: Tiene que haber mayúsculas seguidas por minusculas y esto se puede repetir solamente dos veces. saludos y muchas gracias ___ 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] Duda con expresiones regulares
El día 4 de marzo de 2010 09:43, José Jorge Lorenzo Vila escribió: > > Hola lista, Hola. > Siguiendo las indicaciones he instalado django-wikiapp, > La duda es que tengo problemas con las expresiones regulares y el problema > radica en que por omisión, el título de los artículos en la wiki se valida > contra la siguiente expresión regular. > Alguien me podría decir que patrón es el que se está definiendo aquí? > Me imagino que no debería ser tan restrictivo, pero por alguna razón no me > machea nada. > > WIKI_WORD_RE = r'(?:[A-Z]+[a-z]+){2,}' > wikiword_pattern = re.compile('^' + WIKI_WORD_RE + '$') > No estoy muy seguro, nunca se me han dado demasiado bien, pero mirando la página de la wikipedia sobre expresiones regulares[1], creo que es una palabra que debe empezar con una mayúscula, seguida de cero o más mayúsculas, a la que debe seguir una letra minúscula, seguida de cero o más minúsculas, y la palabra debe tener como mínimo una longitud de dos letras. Como te digo no estoy seguro, que alguien lo confirme o me corrija. > Gracias [1] http://es.wikipedia.org/wiki/Expresiones_regulares > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > -- Saludos Fran ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
[Python-es] Duda con expresiones regulares
Hola lista, Siguiendo las indicaciones he instalado django-wikiapp, La duda es que tengo problemas con las expresiones regulares y el problema radica en que por omisión, el título de los artículos en la wiki se valida contra la siguiente expresión regular. Alguien me podría decir que patrón es el que se está definiendo aquí? Me imagino que no debería ser tan restrictivo, pero por alguna razón no me machea nada. WIKI_WORD_RE = r'(?:[A-Z]+[a-z]+){2,}' wikiword_pattern = re.compile('^' + WIKI_WORD_RE + '$') Gracias ___ 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] MODO DIGEST (era: Re: Resumen de Pyth on-es, Vol 3, Envío 5)
El día 4 de marzo de 2010 09:05, Francesc Alted escribió: > A Thursday 04 March 2010 05:21:48 Jesus Cea escrigué: >> On 03/03/2010 08:21 PM, d1d4c wrote: >> > El modo digest sólo puede servirle (si es que puede llegar a servir de >> > algo) a quien no pretenda escribir, sólo leer. >> >> El modo digest, hoy en día, no tiene sentido. Recomiendo a los admins de >> la lista que desactiven esa opción. > > Bueno, de decir que sólo sirve para leer a que no tiene sentido, hay un > trecho. Yo prefiero que se le diga a la gente de manera cordial (com en el > caso anterior) que mejor subscribirse en modo 'normal'. > Estoy con Francesc. Además yo creo que el modo digest se puede usar bien, si cuando vas a contestar al correo, te bajas el hilo antes y contestas a continuación. > Saludos, > > -- > Francesc Alted > ___ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > -- Saludos Fran ___ 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] MODO DIGEST (era: Re: Resumen d e Python-es, Vol 3, Envío 5)
A Thursday 04 March 2010 05:21:48 Jesus Cea escrigué: > On 03/03/2010 08:21 PM, d1d4c wrote: > > El modo digest sólo puede servirle (si es que puede llegar a servir de > > algo) a quien no pretenda escribir, sólo leer. > > El modo digest, hoy en día, no tiene sentido. Recomiendo a los admins de > la lista que desactiven esa opción. Bueno, de decir que sólo sirve para leer a que no tiene sentido, hay un trecho. Yo prefiero que se le diga a la gente de manera cordial (com en el caso anterior) que mejor subscribirse en modo 'normal'. Saludos, -- Francesc Alted ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/