Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

393
Vistas
Python itera a través de la matriz mientras encuentra la media de los elementos k superiores

Supongamos que tengo una matriz de Python a=[3, 5, 2, 7, 5, 3, 6, 8, 4] . Mi objetivo es iterar a través de esta matriz 3 elementos a la vez devolviendo la media de los 2 primeros de los tres elementos.

Usando la matriz anterior, durante mi paso de iteración, los primeros tres elementos son [3, 5, 2] y la media de los 2 elementos superiores es 4. Los siguientes tres elementos son [5, 2, 7] y la media de los los 2 elementos superiores es 6. Los siguientes tres elementos son [2, 7, 5] y la media de los 2 elementos superiores es nuevamente 6. ...

Por lo tanto, el resultado de la matriz anterior sería [4, 6, 6, 6, 5.5, 7, 7] .

¿Cuál es la mejor manera de escribir tal función?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Solución

Puede usar algunos cortes elegantes de su lista para manipular subconjuntos de elementos. Simplemente tome cada sublista de tres elementos, ordene para encontrar los dos elementos principales y luego encuentre el promedio simple (también conocido como media) y agréguelo a una lista de resultados.

Código

 def get_means(input_list): means = [] for i in xrange(len(input_list)-2): three_elements = input_list[i:i+3] sum_top_two = sum(three_elements) - min(three_elements) means.append(sum_top_two/2.0) return means

Ejemplo

Puede ver su entrada de ejemplo (y el resultado deseado) así:

 print(get_means([3, 5, 2, 7, 5, 3, 6, 8, 4])) # [4.0, 6.0, 6.0, 6.0, 5.5, 7.0, 7.0]

Y más...

Hay algunas otras respuestas excelentes que se convierten en respuestas más dirigidas al rendimiento, incluida una que usa un generador para evitar grandes listas de memoria: https://stackoverflow.com/a/49001728/416500

over 4 years ago · Santiago Trujillo Denunciar

0

Creo en dividir el código en 2 partes. Aquí, eso sería obtener la ventana deslizante, obtener los 2 elementos principales y calcular la media. La forma más limpia de hacer esto es usando generadores.

Ventana deslizante

Ligera variación en la respuesta de evamicur usando tee , islice y zip para crear la ventana:

 def windowed_iterator(iterable, n=2): iterators = itertools.tee(iterable, n) iterators = (itertools.islice(it, i, None) for i, it in enumerate(iterators)) yield from zip(*iterators) windows = windowed_iterator(iterable=a, n=3)
 [(3, 5, 2), (5, 2, 7), (2, 7, 5), (7, 5, 3), (5, 3, 6), (3, 6, 8), (6, 8, 4)]

2 elementos superiores

para calcular la media de los 2 mas altos puedes usar cualquiera de los metodos usados en las otras respuestas, creo que el heapq on es el mas claro

 from heapq import nlargest top_n = map(lambda x: nlargest(2, x), windows)

o equivalente

 top_n = (nlargest(2, i) for i in windows)
 [[5, 3], [7, 5], [7, 5], [7, 5], [6, 5], [8, 6], [8, 6]]

significar

 from statistics import mean means = map(mean, top_n)
 [4, 6, 6, 6, 5.5, 7, 7]
over 4 years ago · Santiago Trujillo Denunciar

0

El siguiente código hace lo que necesitas:

 [sum(sorted(a[i:i + 3])[-2:]) / 2 for i in range(len(a) - 2)]

Dado su a=[3, 5, 2, 7, 5, 3, 6, 8, 4] , devuelve:

 [4.0, 6.0, 6.0, 6.0, 5.5, 7.0, 7.0]
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda