Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. Clase que permite generar dos listas de elementos y devuelve los tiempos de ejecución de las
  5. distintas maneras de calcular la diferencia de elementos de ambas listas.
  6. """
  7. __author__ = 'Gonzalo Chacaltana Buleje'
  8. import os, sys
  9. import time
  10. import random
  11.  
  12. class OperationList():
  13. list_a = []
  14. list_b = []
  15. result = []
  16. random_generate = None
  17.  
  18. def __init__(self, random_generate):
  19. self.random_generate = True if int(random_generate)==1 else False
  20. print ("\n Generacion de elementos aleatorios: " + str("On" if self.random_generate==True else "Off"))
  21.  
  22. def createListA(self, items):
  23. """
  24. Método que crea la primera lista de elementos (números)
  25. """
  26. print ("\nCreando lista A....", end="")
  27. sys.stdout.flush()
  28. if self.random_generate == True:
  29. self.list_a = set([random.randint(1, int(items)*2) for _ in range(int(items))])
  30. else:
  31. self.list_a = set(x for x in range(0, int(items)))
  32. print ("OK ("+ str(len(self.list_a)) +" elementos)")
  33. sys.stdout.flush()
  34.  
  35.  
  36. def createListB(self, items):
  37. """
  38. Método que crea la segunda lista de elementos (números)
  39. """
  40. if int(items) <= len(self.list_a):
  41. print ("Creando lista B....", end="")
  42. sys.stdout.flush()
  43. if self.random_generate == True:
  44. self.list_b = random.sample(set(self.list_a), int(items))
  45. else:
  46. self.list_b = set(x for x in range(0, int(items)))
  47. print ("OK ("+ str(len(self.list_b)) +" elementos)")
  48. else:
  49. raise AttributeError("El numero de elementos de la lista B debe ser menor que " + str(len(self.list_a)))
  50.  
  51. def getDifferent1(self):
  52. """
  53. Primer método para hallar la diferencia de elementos entre la lista A y B
  54. """
  55. return set(a for a in self.list_a if a not in self.list_b)
  56.  
  57. def getDifferent2(self):
  58. """
  59. Segundo método para hallar la diferencia de elementos entre la lista A y B
  60. """
  61. n_list_b = set(self.list_b)
  62. return set(a for a in self.list_a if a not in n_list_b)
  63.  
  64. def getDifferent3(self):
  65. """
  66. Tercer método para hallar la diferencia de elementos entre la lista A y B
  67. """
  68. return set(self.list_a) - set(self.list_b)
  69.  
  70. def calculate(self):
  71. """
  72. Método para calcular los tiempos de ejecución de cada función.
  73. """
  74. operations = [self.getDifferent1, self.getDifferent2, self.getDifferent3]
  75. self.result = {f.__name__:[] for f in operations}
  76. for f in operations:
  77. time_start = time.time()
  78. f()
  79. time_finish = time.time()
  80. #Almacenamos la cantidad de segundos de ejecución de cada método
  81. self.result[f.__name__].append(time_finish - time_start)
  82.  
  83. def printListA(self):
  84. """
  85. Método que muestra en pantalla el contenido de la Lista 1 (A)
  86. """
  87. print (self.list_a)
  88.  
  89. def printListB(self):
  90. """
  91. Método que muestra en pantalla el contenido de la Lista 2 (B)
  92. """
  93. print (self.list_b)
  94. print (len(self.list_b))
  95.  
  96. def showTimeProcess(self):
  97. """
  98. Método que muestra en pantalla los resultados
  99. """
  100. print ("\nTiempos de Ejecucion")
  101. print ("--------------------------------------------------------------------")
  102. sys.stdout.flush()
  103. for f in sorted(self.result):
  104. sys.stdout.flush()
  105. print ("Metodo " + f +" : " + str(sum(self.result[f])/len(self.result[f])) + " segundos")
  106. sys.stdout.flush()
  107.  
  108. if __name__ == '__main__':
  109. try:
  110. """
  111. Las cantidades de elementos que debe tener cada lista se envia por argumentos en la
  112. invocación del script por consola.
  113. Primer argumento: Cantidad de elementos Lista A
  114. Segundo argumento: Cantidad de elementos Lista B
  115. Tercer argumento: Valor númerico donde
  116. 1 = Generar elementos de lista de forma aleatoria
  117. 0 = No generar elementos de lista de forma aleatoria
  118. Ejem: $>py TimeExecutionList.py 400000 3000 0
  119. """
  120. obj = OperationList(sys.argv[3])
  121. obj.createListA(sys.argv[1])
  122. obj.createListB(sys.argv[2])
  123. obj.calculate()
  124. obj.showTimeProcess()
  125. except AttributeError as ex:
  126. print (ex)
  127. except IndexError as ex:
  128. print (ex)
  129. except ValueError as ex:
  130. print (ex)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement