elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Python3]¿Cómo lo puedo optimizar?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Python3]¿Cómo lo puedo optimizar?  (Leído 1,302 veces)
reconFito

Desconectado Desconectado

Mensajes: 27


Ver Perfil
[Python3]¿Cómo lo puedo optimizar?
« en: 14 Enero 2020, 03:34 »

Básicamente se trata de una guía telefónica, la cual tiene ser construida usando diccionarios esa es la restricción, en la cual se puede realizar una búsqueda por  el nombre de la persona y luego imprimir ese nombre con su respectivo número.

PERO TODO INDICA QUE LE FALTA UNA MEJOR OPTIMIZACIÓN.


Gracias por sus respuestas.

Código
  1.    def phone_book():
  2.        n = int(input())
  3.        phone_book = {}  # dictionary
  4.        for i in range(n):
  5.            string = input().split()
  6.            phone_book.update({string[0]: int(string[1])})
  7.        return phone_book
  8.  
  9.    # processing
  10.    def query(phone_book):
  11.        i = 0
  12.        while i < len(phone_book):
  13.            _query = input()
  14.            if _query in phone_book:
  15.                print(f"{_query}={phone_book[_query]}")
  16.            else:
  17.                print("Not found")
  18.            i += 1
  19.    query(phone_book())
  20.  
  21. [/


« Última modificación: 15 Enero 2020, 00:39 por reconFito » En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: [Python3]¿Cómo lo puedo optimizar?
« Respuesta #1 en: 14 Enero 2020, 05:14 »

Código:
[code=python]def query(phone_book):
    for i in range(len(phone_book)):
        _query = input()

no entiendo la cantidad de ciclos alli

el primero... estás haciendo un query, entonces para que repetirlo tanto como numeros de telefonos haya? solo lo necesitas hacer una vez y listo...

luego aqui
Código
  1. if _query in phone_book:
  2.            for key in phone_book:
  3.                if _query == key:
  4.                    print(f"{key}={phone_book[key]}")
  5.        else:
  6.            print("Not found")
no entiendo que hace el ciclo, es decir si query está en el phone_book, tan simple como que lo puedes acceder, no tienes que recorrer el diccionario, ese es el punto de los mismos...

con correcciones quedaría según mi estilo

Código
  1. def phone_book():
  2.    n = int(input("indica cuantos numeros vas a ingresar: ")) # 1*
  3.    phone_book = {}
  4.    for i in range(n):
  5.        buff = input("ingresa el nombre un espacio y el numero: ") # 2*
  6.        nombre, numero = buff.split(" ", 1) # 3*
  7.        phone_book[nombre] = numero # 4*
  8.    return phone_book
  9.  
  10. def query(phone_book):
  11.    _query = input("ingresa el nombre a buscar: ")
  12.    if _query in phone_book:
  13.         print(f"{_query}={phone_book[_query]}") # 5*
  14.    else:
  15.         print("Not found")
  16.  
  17. query(phone_book())


1* importante saber que pides
2* cuidado con usar palabras reservadas, no te vaya a traer errores mas adelante
3* aunque parezca redundante ayuda a dejar claro y visible lo que pasa
4* ya que no estás fusionando 2 diccionarios si no agregando un solo elemento, no es necesario usar update con un diccionario temporal
5* cuidado con la impresion de formato, esto es apropiado para debug pero puede traerte problemas en un sistema de produccion
[/code]


« Última modificación: 14 Enero 2020, 05:17 por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
@XSStringManolo
<svg/onload=alert()>
Colaborador
***
Desconectado Desconectado

Mensajes: 2.136


Turn off the red ligth


Ver Perfil WWW
Re: [Python3]¿Cómo lo puedo optimizar?
« Respuesta #2 en: 14 Enero 2020, 08:09 »

Los bucles while son más rápidos que los for en prácticamente todos los lengujes (en javascript no porque hacen cosas raras con los engine)

while --n:

Al llegar a 0 para solo porque equivale a false, no tienes que declarar ni iterar i ni comprobar el condicional de i con n.

Si buscas performance usa asyncio, multithread, controla instancias programáticamente o algo así. Testea y compara.
En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: [Python3]¿Cómo lo puedo optimizar?
« Respuesta #3 en: 14 Enero 2020, 08:13 »

Los bucles while son más rápidos que los for en prácticamente todos los lengujes (en javascript no porque hacen cosas raras con los engine)

while --n:

Al llegar a 0 para solo porque equivale a false, no tienes que declarar ni iterar i ni comprobar el condicional de i con n.

Si buscas performance usa asyncio, multithread, controla instancias programáticamente o algo así. Testea y compara.


insisto... los while a nivel de compilador son básicamente lo mismo, incluso si tuvieran 3 o 4 instrucciones extra es irrelevante incluso ante una suma...

por otro lado, mira el tema y el código para tirar de cosas como esas librerias... es decir, virtualmente no creo que sea si quiera posible aplicarlas aqui... estamos hablando de un problema de algoritmia, no de limitacion de sistema

por otro lado en python es preferible que uses el for para navegar los array ya que en el interprete se hace a bajo nivel en comparacion con tu accesandolo por ciclo
« Última modificación: 14 Enero 2020, 08:15 por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
reconFito

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: [Python3]¿Cómo lo puedo optimizar?
« Respuesta #4 en: 15 Enero 2020, 00:43 »

Obtuve un buen resultado usando el bucle while en la busqueda.
Pero parece que aun le falta más optimización
En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: [Python3]¿Cómo lo puedo optimizar?
« Respuesta #5 en: 15 Enero 2020, 00:45 »

insisto... ni si quiera se para que haces una busqueda... :s es decir, tienes que obligatoriamente hacer una busqueda con un ciclo? porque python la hace por ti...
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
reconFito

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: [Python3]¿Cómo lo puedo optimizar?
« Respuesta #6 en: 15 Enero 2020, 01:10 »

Si tengo que usar un ciclo ya que la cantidad de busquedas es igual a la longitud del diccionario.
Es una práctica de HackerRank, con el ciclo while logre componer un error de compilación ahora obtengo un
Runtime Error y busque en san google y encontre que es por falta de optimización pero no se que más hacerle.
En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: [Python3]¿Cómo lo puedo optimizar?
« Respuesta #7 en: 15 Enero 2020, 01:39 »

estás seguro que estás trabajando en python? python no compila, asi que no puedes tener errores de compilacion...

y runtime error es un error generico que no recuerdo que python muestre,  python da errores muy detallados tipo

Código:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

que interprete de pyhton usas?

como dice exactamente el problema que resuelves?
« Última modificación: 15 Enero 2020, 01:42 por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
reconFito

Desconectado Desconectado

Mensajes: 27


Ver Perfil
Re: [Python3]¿Cómo lo puedo optimizar?
« Respuesta #8 en: 15 Enero 2020, 01:42 »

¿Que está?
En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 15.347



Ver Perfil
Re: [Python3]¿Cómo lo puedo optimizar?
« Respuesta #9 en: 15 Enero 2020, 01:50 »

disculpa, estaba escribiendo y se mandó el mensaje... aqui completo

estás seguro que estás trabajando en python? python no compila, asi que no puedes tener errores de compilacion...

y runtime error es un error generico que no recuerdo que python muestre,  python da errores muy detallados tipo

Código:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

que interprete de pyhton usas?

como dice exactamente el problema que resuelves?
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Como optimizar conexión wifi?
Wireless en Windows
motocros_elche 5 3,519 Último mensaje 23 Diciembre 2012, 10:55
por zydas
como optimizar programas
Programación C/C++
Drewermerc 6 1,435 Último mensaje 16 Mayo 2014, 05:55
por Drewermerc
Como podríamos optimizar al ser humano « 1 2 »
Foro Libre
Ori-chan 11 2,917 Último mensaje 31 Mayo 2015, 08:12
por scott_
[RESUELTO] ejecutar recv() temporalmente | Python3 sockets
Scripting
Drakaris 1 585 Último mensaje 14 Agosto 2020, 16:39
por Drakaris
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines