Ver Mensaje Individual
  #10 (permalink)  
Antiguo 20/03/2014, 15:28
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Chequear si cierto valor existe dentro de una string.

Hola WebDeveloperZ

Cita:
Pregunto porque tengo una tabla de filtros en la base de datos, palabras que no quiero permitir y cada ves que se agrega un registro hare un loop a traves de esas palabras para revisar que no esten en la data a insertarse.
Yo en lo personal no utilizaría un bucle, bueno si es que se lo puede esquivar, en si, Python es extremadamente rápido en los bucles, hace unos días probé un archivo de Trivias de preguntas y respuestas, copie y pegue todo el contenido de ese archivo en el mismo archivo e inicié un bucle y en 6 segundos buscó en 5 millones de líneas.
A lo que apunto que podés utilizar el bucle, cláro, pero si podés utilizar otro método, mejor, bueno por lo menos yo siempre trato de no usarlos, osea si es que se necesita si, pero si no, no.
Por ejemplo yo descubrí una manera de esquivarle a los bucles y que es más rápido que ellos, aunque eso no lo notarás practicamente, excepto en archivos que tengan mucha información.
Te soy sincero, jamás trabajé con base de datos, por lo menos no con MySql ni ninguna de esas, sólo con archivos en formato .txt y me ha ido bastante bien, aunque no es lo ideal para muchos casos.
Te dejo un ejemplo de como lo podrías hacer sin usar el bucle for ni el while.
Supongamos que tenés una agenda en donde almacenás contactos, Nombre y Apellido, número de teléfono, domicilio, etc.
Bueno si vos querrías buscar por ejemplo el nombre para saber si esa persona existe en el archivo, bastaría con tan sólo agregar a esa persona un guión y un espacio antes del nombre o apellido (dependiendo de que es lo que agregés primero) y al final, aunque podrías utilizar el chr(160) que es un espacio especial, un espacio de no separación.
Supongamos que en un archivo .txt almacenes algo así (por ejemplo de nombre "Nombres_Clientes"):

Martín Figueroa Domicilio numero edad
Belén María Domicilio numero edad
Nancy Domicilio numero edad
Joaquín Domicilio numero edad


yo lo dejaría asi:

- Martín Figueroa - Domicilio | numero ~ edad
- Nancy Quiroga - Domicilio | numero ~ edad
- Belén María Mendez - Mi casa | 123456789 ~ 45
- Joaquín Astrada - Domicilio | numero ~ edad



y con tan sólo hacer un código como este:

Código Python:
Ver original
  1. # -*- coding: utf-8 -*-
  2.  
  3. Archivo = open("C:\Users\Daniel\Desktop\Nombres_Clientes.txt", "r")
  4. Datos = Archivo.read()
  5. Archivo.close()
  6.  
  7. Nombre_Persona = u"- Belén María Mendez -"
  8. Nombre_Persona = Nombre_Persona.encode("Windows-1252")
  9.  
  10. if Nombre_Persona.lower() in Datos.lower():
  11.     print "Si existe:" + Nombre_Persona.replace("-", "")
  12.     print "Sus datos son:"
  13.     Nombre2 = Datos.find(Nombre_Persona)
  14.     print Datos[Nombre2:Datos.find("\n", Nombre2)]
  15. else:
  16.     print "No existe la persona " + Nombre_Persona.replace("-", "")
  17.  
  18. raw_input()

Ya podrías buscar tus contactos sin usar ningún bucle.
Comento esto porque he leído muchas veces a usuarios preguntando en otros foros si "existe alguna manera de no usar el bucle for o el while", en realidad si se puede, en el ejemplo utilicé sólo 1 método, pero se pueden hacer más, hasta incluso de diferentes maneras, el secreto es pensar.
Yo por ejemplo utilizo eso muchas veces y aunque quizás para muchos eso sea un problema o un lío, para mí es muy útil.
Estos métodos los he creado yo sin ningún manual, he pensado formas de esquivarles a los bucles y lo conseguí, pero no es nada malo que utilicés un bucle, para nada, al contrarío, es lo ideal ya que para eso han sido creados.
Bueno este es un excelente método, la verdad bastante bueno, por lo menos yo casi siempre trabajé así creando mis propios métodos para acelerar la búsqueda y evitar el bucle, pero usá el bucle si querés, es rápido igual, este es sólo una forma nada más de como podrías comprobar una X cadena dentro de otra sin usar el bucle for o el while.

¿Que tan efectivo sería esto?:
En realidad eso depende para que lo necesités, si trabajás con base de datos, entónces es probable que no te servirá mi ejemplo, digo es probable porque jamás deberías cambiar MySQL por un simple archivo de texto, pero te puede servir para otros programas.
Por ejemplo yo he creado códigos para mIRC Scripting e hice un Reproductor de música que el buscador del mismo es extremadamente rápido, yo hubiera empleado un while o un goto, pero me llevaría varios segundos en encontrar los resultados, esto hubiese demorado mucho tiempo, así que empleé mi propio método y la verdad es que al presionar ENTER para buscar canciones o artistes que concuerden con lo que deseas, el resultado es inmediato, no demora nada, en el mismo segundo lo hace, muchísimas personas usarían un bucle para eso y les demoraría mucho más tiempo.

Eso es todo.
Espero que te sirva!!
Nos vemos!! Suerte!