Python: использование оператора ИЛИ для переменного числа условий неравенства - PullRequest
0 голосов
/ 18 октября 2018

Предположим, у меня есть n значения в списке x = [1.2, -0.4, 3.5, ....]. Мне нужно проверить, находится ли хотя бы одно из них ниже нуля.

Таким образом, в принципе, если бы у меня было только два значения, я бынаписано if x[0]< 0 or x[1] < 0

Но теперь мне нужно использовать тот же оператор или оператор внутри цикла, чтобы проверить каждое из значений в списке.

Кажется, что команда any(x) < 0 возвращает False каждый раз.

Как мне это сделать?

Ответы [ 4 ]

0 голосов
/ 18 октября 2018

Вы также можете использовать numpy для векторизованных операций

import numpy as np
x = np.array([1.2, -0.4, 3.5,0])
x<=0 # will return the array of boolean values

Если вам просто нужно проверить, выполнено ли условие или нет, тогда

any(x<=0) # will return true if array contains atleast one True
0 голосов
/ 18 октября 2018

При использовании any() или all() компьютер проверит, являются ли элементы в итерируемой Истиной или Ложью.Таким образом, вам нужно добавить понимание списка для создания итерируемого:

any([elt < 0 for elt in x])
0 голосов
/ 18 октября 2018

В основном вам нужно сделать следующее:

any(value < 0 for value in X)

Подробное объяснение вы можете найти здесь

0 голосов
/ 18 октября 2018

any не векторизовано.Вам нужно будет применить его к каждому объекту в x:

any(n < 0 for n in x)

n < 0 for n in x создает генератор, который возвращает одно значение за один раз из x, и является достаточно эффективным, поскольку он короткий-схемы, что означает, что он сломается (и вернется True), как только найдет первый n, который < 0.

...