2016-04-05 14 views
1

Ich versuche, ein Stück Code zu schreiben, der das Minimum einer Variablen (RSS3) nur findet, wenn alle Elemente einer Liste (rate3)> 0 sind. Ich habe es getan :Wenn Bedingung nicht wie erwartet zurückkehrt

if RSS3_min < RSS3_fin and (all(guess3[q]) > 0 for q in range(len(guess3))): 
    RSS3_fin = RSS3_min 
    guess3_fin = guess3 
    print i,j,k, 'RSS3 = ',RSS3_fin, 'guess3 = ', guess3 

die Ausgabe sieht so aus:

0 1 2 RSS3 = 152.470584348 guess3 = [ 1.03993316e-18 -4.21309327e-21 3.91958921e-23] 
0 1 3 RSS3 = 138.828305634 guess3 = [ -9.72979812e-18 2.45455199e-20 9.91015993e-17] 
0 2 6 RSS3 = 110.971076196 guess3 = [ 2.51690683e-18 6.50243486e-23 -1.64840584e-18] 
0 2 12 RSS3 = 110.167564411 guess3 = [ 1.67526232e-18 6.93897310e-23 -9.25020238e-19] 

was bedeutet, dass der zweite Teil meiner if Bedingung nicht erfüllt ist. Wo liege ich falsch? Bitte bedenke, dass ich Python wirklich neu bin, also halte die Dinge einfach ... Danke!

+0

Was über deine Ausgabe suggeriert dir, dass das zweite Stück des 'if' nicht zufrieden ist? Welche Ausgabe erwarten Sie stattdessen? –

+0

'all (rate3 [q])> 0 'tut nicht das, was Sie denken, das ist nur wahr, wenn Sie keinen falschen Wert haben in was auch immer' rate3 [q])' ist und dann nur weil 'True> 0' –

+0

Hinweis: Was ist ein Unterschied zwischen: '(all (g)> 0 für g in guess3)' und 'all (g> 0 für g in guess3)'? –

Antwort

2

Die schließende Klammer nicht an der richtigen Stelle ist, fixiert:

if RSS3_min < RSS3_fin and all(guess3[q] > 0 for q in range(len(guess3))): 

Beachten Sie, dass, da dies Python, können Sie Schleife über die Elemente in der Liste direkt:

if RSS3_min < RSS3_fin and all(item > 0 for item in guess3): 
+0

Oder einfach 'all (q> 0 für q in guess3)' –

Verwandte Themen