Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def listaTriangular(l):
- '''
- Defini las funciones internas maximo(), minimo(), indiceNumeroMayor() y diferencia()
- por si esto es para una asignacion de la universidad y requieren hacerlo todo desde cero sin usar modulos.
- Sino, entonces puedes reemplazar estas funciones por sus respectivos equivalentes:
- maximo() = max() (funcion nativa)
- minimo() = min() (funcion nativa)
- diferencia() = numpy.diff() (function del modulo Numpy, deberás importarlo: import numpy)
- indiceNumeroMayor() = numpy.argmax()
- Explicación:
- 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
- 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.
- 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
- 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.
- '''
- def maximo(l):
- m = l[0]
- for i in l:
- if i > m:
- m = i
- return m
- def minimo(l):
- m = l[0]
- for i in l:
- if i < m:
- m = i
- return m
- def indiceNumeroMayor(l):
- i = maximo(l)
- return [a for a,b in enumerate(l) if b == i][0]
- def diferencia(l):
- return [l[i+1] - l[i] for i in range(len(l)-1)]
- i = indiceNumeroMayor(l)
- return (minimo(diferencia(l[0:i])) >= 0) and (maximo(diferencia(l[i:-1])) <= 0)
- print("Es triangular" if listaTriangular([2, 4, 5, 7, 5, 8, 4, 3, 1]) else "No es triangular")
- print("Es triangular" if listaTriangular([2, 4, 5, 7, 4, 3]) else "No es triangular")
- #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