2017-03-07 3 views
0

Ich mache einen Scheck, wenn jedes Element die Bedingungen erfüllt,jeder mit, wenn man mit for-Schleife

if any(plus > minimum and minus > minimum for el in alist): 

    # do something 

aber mit mit (Hinzufügen) in der gleichen Schleife:

if numpy.isnan(el.error): 
    plus = el.value 
    minus = el.value 
else: 
    plus = el.value + el.error 
    minus = el.value - el.error 

Also, ich will innerhalb any() Funktion haben, eine for-Schleife und eine if else-Anweisung.

+0

Warum nicht die if-Anweisung vor der 'jede()' Funktion zu tun? –

+0

@GijsDenHollander: Weil ich einen anderen für die Schleife verwenden muss. Ich habe mich gefragt, ob es ohne es möglich ist. – George

+0

Aber in der 'any (..)' machst du nichts mit dem 'el' ... –

Antwort

2

Wenn ich die Logik richtig bin zu verstehen, wollen Sie sicherstellen el.value +/- el.error größer als minimum, solange die error existiert (sonst nur die value verwenden).

Sie müssen nicht beide Seiten überprüfen, da Sie abs Ihre error vor dem Subtrahieren können. Sie können eine Hilfsfunktion definieren:

def min_val(el): 
    if numpy.isnan(el.error): 
     return el.value 
    return el.value - numpy.abs(el.error) 

dann verwenden, in Ihrem any Aufruf:

if any(min_val(el) > minimum for el in alist): 

Sie auch die Helfer als Lambda schreiben könnte, oder sogar den gesamten Ausdruck in dem any Anruf halten, aber wird es schwieriger zu lesen:

min_val = lambda el: el.value - (0 if numpy.isnan(el.error) else abs(el.error)) 
+0

Danke, nette Lösung! (upvoted) – George

1

eine Funktion auszuführen und verwenden, die in Ihrem any Aufruf:

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 

dann Verwendung von any machen:

if any(checker(el,minimum) for el in alist): 
    # do something!! 

Sie tun können, auch einen ekelhaften Einzeiler (gleich auf den Kommentar von Patrick).

+0

Danke! (upvoted) – George

Verwandte Themen