Я хочу сделать внутреннее сравнение без написания 'If операторов' на Python. Если значение соответствует пороговому условию, оно должно быть неизменным. Если это не так, значение должно быть установлено на 0.

В Python мне не разрешено применять логический оператор к списку напрямую. В Matlab удобно, когда «True» дает «1», а «False» дает ноль в операциях с массивами. Это похоже на Matlab, но не будет работать в Python (может быть, с NumPy?). Пример псевдокода:

a = [1.5, 1.3, -1.4, -1.2]
a_test_positive = a>0 # Gives [1, 1, 0, 0]
positive_a_only = a.*a>0 

Желаемый результат:

positive_a_only>> [1.5, 1.3, 0, 0]

Каков наилучший способ сделать это в Python?

0
Kelton Temby 1 Мар 2018 в 10:25

3 ответа

Лучший ответ

Тебе нужно -

a = [1.5, 1.3, -1.4, -1.2]
positive_a_only = [i if i>0 else 0 for i in a]

print(positive_a_only)

< Сильный > Выход

[1.5, 1.3, 0, 0]

Это известно как понимание списка В соответствии с вашим входом и ожидаемым выходом, это «питонный» способ сделать это

Постижения списков обеспечивают краткий способ создания списков. Обычными приложениями являются создание новых списков, в которых каждый элемент является результатом некоторых операций, примененных к каждому члену другой последовательности или итеративных, или создание подпоследовательности тех элементов, которые удовлетворяют определенному условию.

Вы используете случай как бы для этого :)

3
Vivek Kalyanarangan 1 Мар 2018 в 07:27

Наилучший ответ, который я нашел на данный момент, - перечислять и перебирать массив, используя оператор python для порога или логику сравнения.

Ключ должен умножить элемент индекса на логическое сравнение. например

a = 1.5
a_positive = a * (a>0)
print(a)

Возвращает значение 1,5, как и ожидалось, и возвращает 0, если a отрицательно.

Вот пример с полным списком:

a = [1.5, 1.3 -1.4, -1.2]
for i, element in enumerate(a):
     a[i] = element*(element>0)

print(a)
[1.5, -0.0, -0.0]

Надеюсь, что это помогает кому-то!

0
Kelton.Temby 1 Мар 2018 в 07:25

Возможно, стоит взглянуть на Numpy, если вы работаете с числовыми массивами.

import numpy as np

a = np.array([1.5, 1.3, -1.4, -1.2])
a[a < 0] = 0
# [ 1.5  1.3  0.   0. ]
1
Delgan 1 Мар 2018 в 07:43