def contains(map, key, comparefunction): """ Retorna True si la llave key se encuentra en la tabla de hash o False en caso contrario. Es necesario proveer la función de comparación entre llaves. """ hash = hashValue(map, key) bucket = lt.getElement(map['table'], hash) pos = lt.isPresent(bucket, key, comparefunction) if pos > 0: return True else: return False
def get(map, key, comparefunction): """ Retorna la pareja llave, valor, cuya llave sea igual a key. Es necesario proveer una función de comparación para las llaves. Si la llave no esta presente se retorna None """ hash = hashValue(map, key) bucket = lt.getElement(map['table'], hash) pos = lt.isPresent(bucket, key, comparefunction) if pos > 0: return lt.getElement(bucket, pos) else: return None
def remove(map, key, comparefunction): """ Elimina la pareja llave,valor, donde llave == key. Es necesario proveer la función de comparación entre llaves """ hash = hashValue(map, key) bucket = lt.getElement(map['table'], hash) pos = lt.isPresent(bucket, key, comparefunction) if pos > 0: lt.deleteElement(bucket, pos) map['size'] -= 1 else: return None
def req4(criteria, lstCast, lstMov): """ Retorna la cantidad de elementos que cumplen con un criterio para una columna dada """ # Guardar los id de las peliculas del actor idMov = lt.newList("ARRAY_LIST", compFunc) # Guardar el nombre del director y el numero de las colaboraciones myDirectorDic = {} for i in range(lt.size(lstCast)): director = lt.getElement(lstCast, i) if criteria == director['actor1_name'] or criteria == director['actor2_name'] or criteria == director['actor3_name'] or criteria == director['actor4_name'] or criteria == director['actor5_name']: lt.addLast(idMov, director['id']) dir_name = director['director_name'] # revisa si la llave existe if dir_name in myDirectorDic: myDirectorDic[dir_name] = int(myDirectorDic[dir_name]) + 1 else: myDirectorDic[dir_name] = 1 pelicula = lt.newList("ARRAY_LIST", compFunc) numPel = 0 calProm = 0.0 for i in range(lt.size(lstMov)): id = lt.getElement(lstMov, i)['id'] if lt.isPresent(idMov, id) > 0: lt.addLast(pelicula, lt.getElement(lstMov, i)['title']) numPel += 1 calProm += float(lt.getElement(lstMov, i)['vote_average']) if numPel == lt.size(idMov): break prom = 0.0 if numPel != 0: prom = calProm / numPel # Busca el director con mayores colaboraciones actual = 0 name = "" for k, v in myDirectorDic.items(): if actual < int(v): actual = int(v) name = str(k) res = "Para el actor " + str(criteria) + "\nEl director con el cual más a trabajado es: " + str( name) + "\nSu peliculas tienen un calficación promedio de: " + str(prom) + "\nEl numero de peliculas del actor es: " + str(numPel) + "\n" return pelicula, res
def edges(graph): """ Retorna una lista con todos los arcos del grafo graph """ lstmap = map.valueSet(graph['vertices']) lstresp = lt.newList() itervertex = it.newIterator(lstmap) while it.hasNext(itervertex): lstedge = it.next(itervertex) iteredge = it.newIterator(lstedge) while (it.hasNext(iteredge)): edge = it.next(iteredge) if not (lt.isPresent(lstresp, edge, e.compareedges)): lt.addLast(lstresp, edge) return lstresp
def put(map, key, value, comparefunction): """ Ingresa una pareja llave,valor a la tabla de hash. Si la llave ya existe en la tabla, se reemplaza el valor. Es necesario proveer una función de comparación para las llaves. """ hash = hashValue(map, key) bucket = lt.getElement( map['table'], hash ) #Se obtiene la lista de elementos en la posicion hash de la tabla entry = me.newMapEntry(key, value) pos = lt.isPresent(bucket, key, comparefunction) if pos > 0: #La pareja ya exista, se reemplaza el valor con la nueva información lt.changeInfo(bucket, pos, entry) else: lt.addLast(bucket, entry) #La llave no existia, se crea una nueva entrada map['size'] += 1
def test_isPresent(self): """ Con muchos elementos en la lista """ self.lst = slt.newList('SINGLE_LINKED_LIST') slt.addFirst(self.lst, self.book1) slt.addFirst(self.lst, self.book2) slt.addFirst(self.lst, self.book3) slt.addFirst(self.lst, self.book4) slt.addFirst(self.lst, self.book5) book = {'book_id': '1', 'book_title': 'Title 1', 'author': 'author 1'} self.assertEqual(slt.size(self.lst), 5) present = slt.isPresent(self.lst, book, self.comparebooks) if present > 0: print('el libro esta presente') else: print('El libro no esta presente')
def isPresent(lst, element): """ Informa si el elemento element esta presente en la lista. Informa si un elemento está en la lista. Si esta presente, retorna la posición en la que se encuentra o cero (0) si no esta presente. Se utiliza la función de comparación utilizada durante la creación de la lista para comparar los elementos. Args: lst: La lista a examinar element: El elemento a buscar Returns: Raises: Exception """ try: return lt.isPresent(lst, element) except Exception as exp: error.reraise(exp, 'TADList->isPresent: ')
def req3(criteria, lstCast, lstMov): """ Retorna la cantidad de elementos que cumplen con un criterio para una columna dada """ # Guardar los id de las peliculas del director idMov = lt.newList("ARRAY_LIST", compFunc) for i in range(lt.size(lstCast)): director = lt.getElement(lstCast, i) if criteria == director['director_name']: lt.addLast(idMov, director['id']) pelicula = lt.newList("ARRAY_LIST", compFunc) numPel = 0 calProm = 0.0 for i in range(lt.size(lstMov)): id = lt.getElement(lstMov, i)['id'] # Revisamos si el id de la pelicula actual está en el id de peliculas de nuestro director if lt.isPresent(idMov, id) > 0: lt.addLast(pelicula, lt.getElement(lstMov, i)['title']) numPel += 1 calProm += float(lt.getElement(lstMov, i)['vote_average']) if numPel == lt.size(idMov): break prom = 0.0 if numPel != 0: prom = calProm/numPel res = "El director " + str(criteria) + " posee un total de: " + str(numPel) + \ " peliculas, las cuales tienen una calificación promedio de: " + \ str(prom) + "\n" return pelicula, res
def isPresent(lst, element, comparefunction): """ Informa si el elemento element esta presente en la lista. Si esta presente retorna la posición en la que se encuentra o cero (0) si no esta presente """ return lt.isPresent(lst, element, comparefunction)