Чтобы достичь "this или that" в понимании списка, вам нужно использовать выражение if
.Это позволяет вам добавить предложение else
, как и ожидалось -
values = [
-97476.70633454417,
-93170.30642401175,
-89901.82679086612,
-87187.62533194348,
-87269.09594982903,
-85513.31676486236,
-83545.26529198853,
-82411.91255123452,
-81620.01849452594,
]
norm_BIC = [(-1.0) * float(i)/max(values) if i < 0 else float(i)/max(values) for i in values if i > 0]
Синтаксис здесь не зависит от понимания списка, сравните с этим выражением if
-
a = 10 if b < 10 else 20
Запустив значения в вашем примере без этого окончательного значения if
, то есть
norm_BIC = [(-1.0) * float(i)/max(values) if i < 0 else float(i)/max(values) for i in values]
, я получу следующий вывод:
[-1.1942744945724522,
-1.1415129295794078,
-1.1014678561595233,
-1.0682137414339221,
-1.0692119109931586,
-1.0477002865491576,
-1.0235879240531134,
-1.0097022038381638,
-1.0]
Если вы просто хотите убедиться, что результат ваших расчетов положительный, вы можетеиспользуйте встроенную функцию abs()
.
norm_BIC = [abs(float(i)/max(values)) for i in values]