Python 如果使用一个for循环,则为任意
我正在检查是否有任何元素符合条件Python 如果使用一个for循环,则为任意,python,Python,我正在检查是否有任何元素符合条件 if any( plus > minimum and minus > minimum for el in alist): # do something 但如果在同一循环中有(添加): if numpy.isnan(el.error): plus = el.value minus = el.value else: plus = el.value + el.error minus = el.value - el
if any( plus > minimum and minus > minimum for el in alist):
# do something
但如果在同一循环中有(添加):
if numpy.isnan(el.error):
plus = el.value
minus = el.value
else:
plus = el.value + el.error
minus = el.value - el.error
因此,我想在
any()
函数中包含for循环和if-else语句。创建一个函数,并在any
调用中使用它:
def checker(el, minimum):
plus = minus = 0 # make sure to initialize
if numpy.isnan(el.error):
plus = el.value
minus = el.value
else:
plus = el.value + el.error
minus = el.value - el.error
return plus > minimum and minus > minimum
if any(min_val(el) > minimum for el in alist):
然后使用any
:
if any(checker(el,minimum) for el in alist):
# do something!!
你也可以做一个令人厌恶的单行程序(类似于Patrick的评论)。创建一个函数,并在你的
任何调用中使用它:
def checker(el, minimum):
plus = minus = 0 # make sure to initialize
if numpy.isnan(el.error):
plus = el.value
minus = el.value
else:
plus = el.value + el.error
minus = el.value - el.error
return plus > minimum and minus > minimum
if any(min_val(el) > minimum for el in alist):
然后使用any
:
if any(checker(el,minimum) for el in alist):
# do something!!
你也可以做一个令人厌恶的一行代码(类似于Patrick的评论)。如果我正确理解了逻辑,你要确保el.value
+/-el.error
大于最小值
,只要错误
存在(否则只需使用值
)
实际上,你不必检查两边,因为你可以在减法之前检查你的abs
error
。可以定义辅助函数:
def min_val(el):
if numpy.isnan(el.error):
return el.value
return el.value - numpy.abs(el.error)
然后在您的任何
通话中使用该选项:
def checker(el, minimum):
plus = minus = 0 # make sure to initialize
if numpy.isnan(el.error):
plus = el.value
minus = el.value
else:
plus = el.value + el.error
minus = el.value - el.error
return plus > minimum and minus > minimum
if any(min_val(el) > minimum for el in alist):
您也可以将helper编写为lambda,甚至可以将整个表达式粘贴在any
调用中,但这样会更难阅读:
min_val = lambda el: el.value - (0 if numpy.isnan(el.error) else abs(el.error))
如果我正确理解了逻辑,您需要确保
el.value
+/-el.error
大于最小值
,只要错误
存在(否则只需使用值
)
实际上,你不必检查两边,因为你可以在减法之前检查你的abs
error。可以定义辅助函数:
def min_val(el):
if numpy.isnan(el.error):
return el.value
return el.value - numpy.abs(el.error)
然后在您的任何
通话中使用该选项:
def checker(el, minimum):
plus = minus = 0 # make sure to initialize
if numpy.isnan(el.error):
plus = el.value
minus = el.value
else:
plus = el.value + el.error
minus = el.value - el.error
return plus > minimum and minus > minimum
if any(min_val(el) > minimum for el in alist):
您也可以将helper编写为lambda,甚至可以将整个表达式粘贴在any
调用中,但这样会更难阅读:
min_val = lambda el: el.value - (0 if numpy.isnan(el.error) else abs(el.error))
为什么不在
any()
函数之前执行if语句?@GijsDenHollander:因为我必须使用另一个for循环。我想知道没有它是否可能。但是在any(…)
您不需要对el
执行任何操作。..@WillemVanOnsem:这就是为什么我必须在any中插入if语句的原因。.我认为类似的方法应该可以工作<代码>任何(加号>最小值和减号>加号的最小值,减号在((el.value,el.value)if numpy.isnan(el.error)else(el.value+el.error,el.value-el.error)for el in alist))为什么不在any()之前执行if语句
函数?@GijsDenHollander:因为我必须使用另一个for循环。我想知道没有它是否可能。但是在any(…)
中,你不能使用el
…@WillemVanOnsem:这就是为什么我必须在any中插入if语句的原因。我认为这样应该可以<代码>任意(加号>最小值和减号>加号的最小值,如果numpy.isnan(el.error),则为((el.value,el.value)中的加号,如果numpy.isnan(el.error),否则为el.alist(el.value+el.error,el.value-el.error))中的el(