Sé que esto se puede hacer fácilmente en un bucle for, pero creo que debe haber una forma intuitiva de hacerlo en 1 línea. Para obtener más explicaciones, se le dan dos listas, "jugo" y "capacidad". jugo muestra cuánto jugo tiene un determinado índice y capacidad muestra la capacidad del índice. Estoy tratando de encontrar el índice con la mayor capacidad restante. Así que traté de hacer eso haciendo esto:
maxCap = max(capacity[i] - juice[i] for i in range (0, N - 1))
Pero, por supuesto, esto no guarda el índice. ¿Cómo puedo asignar maxCap a la "i" que produce el maxCap como he escrito?
2 respuestas
maxCap = max(capacity[i] - juice[i] for i in range (0, N - 1))
Esto mismo se puede hacer más simple de esta manera (aunque no entiendo la parte N-1
, así que la estoy ignorando):
maxCap = max(c - j for c, j in zip(capacity, juice))
Aún así, eso da el resultado, no el índice. Para encontrar el índice, max
tiene que pasar por los valores de i
, en lugar de los resultados calculados, pero maximizar los resultados, así:
max_index = max(range(N), key=lambda i: capacity[i] - juice[i])
Por otro lado, si busca eficiencia, esto es bueno para numpy
. Si tanto juice
como capacity
son matrices numpy
, entonces esto se puede hacer:
max_diff = (a - b).max()
max_index = (a - b).argmax()
Puede usar reduce
:
import functools
remainings = [capacity[i] - juice[i] for i in range (0, len(capacity) - 1)]
maxCap = functools.reduce(lambda acc, cur: acc if remainings[acc] > remainings[cur] else cur, range(len(remainings)), 0)
Reducir itera sobre el iterable y devuelve un único resultado determinado por la función reductora dada.
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.