Advertisement
angelhdz12

Lista De Numeros Triangular

Sep 25th, 2018
501
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.39 KB | None | 0 0
  1. def listaTriangular(l):
  2.   '''
  3.  Defini las funciones internas maximo(), minimo(), indiceNumeroMayor() y diferencia()
  4.  por si esto es para una asignacion de la universidad y requieren hacerlo todo desde cero sin usar modulos.
  5.  Sino, entonces puedes reemplazar estas funciones por sus respectivos equivalentes:
  6.  
  7.  maximo() = max() (funcion nativa)
  8.  minimo() = min() (funcion nativa)
  9.  diferencia() = numpy.diff() (function del modulo Numpy, deberás importarlo: import numpy)
  10.  indiceNumeroMayor() = numpy.argmax()
  11.  
  12.  Explicación:
  13.  
  14.  Primero se obtiene el indice del numero mayor de la lista y se almacena en la variable 'i' con la funcion indiceNumeroMayor(). Luego se retorna una expresion que compara 2
  15.  expresiones. La primera expresion, corta la lista desde el indice 0 hasta el indice 'i' luego devuelve la diferencia, luego devuelve el minimo de esta diferencia y finalmente compara si es mayor o igual a 0. La segunda expresion hace basicamente lo mismo, con la diferencia de que primero corta la lista desde la posicion 'i' hasta -1 que es el ultimo elemento de la lista, luego devuelve la diferencia, luego el maximo y finalmente compara si es menor o igual a 0.
  16.  
  17. Basicamente lo que se esta haciendo es dividiendo la lista en el indice del numero mayor, resultando en 2 sublistas, una con los numeros posiblemente creciendo y la otra con los numeros posiblemente decreciendo. Si las 2 expresiones devuelven cierto, entonces
  18. tenemos una lista que crece y luego decrece. Si la primera expresion devuelve falso, entonces no esta creciendo. Si la segunda expresion devuelve falso, no esta decreciendo.
  19.  '''
  20.   def maximo(l):
  21.     m = l[0]
  22.     for i in l:
  23.       if i > m:
  24.         m = i
  25.     return m
  26.  
  27.   def minimo(l):
  28.     m = l[0]
  29.     for i in l:
  30.       if i < m:
  31.         m = i
  32.     return m
  33.  
  34.   def indiceNumeroMayor(l):
  35.     i = maximo(l)
  36.     return [a for a,b in enumerate(l) if b == i][0]
  37.  
  38.   def diferencia(l):
  39.     return [l[i+1] - l[i] for i in range(len(l)-1)]
  40.  
  41.   i = indiceNumeroMayor(l)
  42.   return (minimo(diferencia(l[0:i])) >= 0) and (maximo(diferencia(l[i:-1])) <= 0)
  43.  
  44. print("Es triangular" if listaTriangular([2, 4, 5, 7, 5, 8, 4, 3, 1]) else "No es triangular")
  45. print("Es triangular" if listaTriangular([2, 4, 5, 7, 4, 3]) else "No es triangular")
  46.  
  47.  
  48. #Fuente:  https://stackoverflow.com/questions/50012089/how-can-i-determine-if-the-numbers-in-a-list-initially-increase-or-stay-the-sam
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement