list = [[159.2213, 222.2223, 101.2122]
[359.2222, 22.2210, 301.2144]]
if list[1][0] < list[0][0]:
avg = (list[1][0] + list[0][0] - 200)/2
else:
avg = (list[1][0] + list[0][0] + 200)/2
¡Hola! Quiero hacer esto para cada columna y mostrar los resultados en otra lista.
Supongo que falta un al final de la primera línea.
-usuario_na
27/03/2021 a las 17:53
Eche un vistazo a numpy, ya que las operaciones de 'columna' serán más fáciles que usar listas.
– s3dev
27/03/2021 a las 17:55
------------------------------------
Arreglar
Puedes iterar en bucle el número de columnas que hay
values = [[159.2213, 222.2223, 101.2122], [359.2222, 22.2210, 301.2144]]
avgs = []
for idx_col in range(len(values[0])):
if values[1][idx_col] < values[0][idx_col]:
avg = (values[1][idx_col] + values[0][idx_col] - 200) / 2
else:
avg = (values[1][idx_col] + values[0][idx_col] + 200) / 2
avgs.append(avg)
Simplificar
Puedes usar zip para iterar en ambas filas a la vez y simplificar la condición if/else
avgs = []
for first_row, second_row in zip(*values):
factor = -1 if second_row < first_row else 1
avgs.append((first_row + second_row + (200 * factor)) / 2)
Mejor con numpy
Sintaxis sencilla y mejor rendimiento
import numpy as np
values = np.array(values)
res = values.sum(axis=0) / 2
res += np.where(values[1] < values[0], -100, 100)
------------------------------------
Una lista por comprensión se vería así:
avg = [(x + y + (200 if x <= y else -200)) / 2 for x, y in zip(*lst)]
Podría decirse que es más fácil si usas numpy:
arr = np.array(lst)
avg = 0.5 * (arr.sum(axis=0) + np.copysign(200, np.diff(arr, axis=0)))
------------------------------------
lis = [[159.2213, 222.2223, 101.2122],
[359.2222, 22.2210, 301.2144]]
res = []
for i in range(len(lis[0])):
if lis[1][i] < lis[0][i]:
res.append((lis[1][i] + lis[0][i] - 200)/2)
else:
res.append((lis[1][i] + lis[0][i] + 200)/2)
Esto debería funcionar, sin embargo, usar numpy sería una mejor solución para este tipo de problemas.
------------------------------------
Puedes hacerlo así:
list = [[159.2213, 222.2223, 101.2122]
[359.2222, 22.2210, 301.2144]]
results = []
for x,y in zip(list[0],list[1]):
if y < x:
avg = (y + x - 200)/2
else:
avg = (y + x + 200)/2
results.append(avg)