Minimum in Intervall

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Carsten1983
User
Beiträge: 20
Registriert: Montag 9. Juni 2008, 14:17
Wohnort: Halle/Saale

Hallo allerseits,

ich habe eine Liste (oder auch ein numpy.array) t z.B. so:

Code: Alles auswählen

t=[1.3 , 0.2 , -0.1 , 5 , 0.6] 
Aus dieser Liste möchte ich das Minimum finden, das im Intervall zwischen 0 und 1 liegt. Ich suche nun eine Möglichkeit, wie ich das weniger umständlich machen kann, als mit schleifen. Gibts da nicht irgendeinen Befehl?

Danke
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Was ist an Schleifen umständlich?!

Code: Alles auswählen

min = 1.0
for item in t:
  if item >= 0.0 and item < min:
    min = item
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Code: Alles auswählen

In [1]: foo = [1.3, 0.2, -0.1, 5, 0.6]

In [2]: min(num for num in foo if 0 < num < 1)
Out[2]: 0.20000000000000001
Carsten1983
User
Beiträge: 20
Registriert: Montag 9. Juni 2008, 14:17
Wohnort: Halle/Saale

Ich dachte es gibt vielleicht eine Standardfunktion, die mir nicht geläufig ist.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mit numpy im Hintergrund geht auch:

Code: Alles auswählen

In [105]: x
Out[105]: array([ 1.3,  0.2, -0.1,  5. ,  0.6])

In [106]: criterion = (x >= 0) & (x <= 1)

In [107]: min(x[criterion])
Out[107]: 0.20000000000000001
Das kann man natürlich auch in einen Ausdruck in eine Zeile tippen, aber ich denke, so ist es deutlicher. Bei kleinen Arrays sollte es kein Problem sein - bei großen Arrays oder vielen Aufrüfen bin ich mir aber nicht sicher. Müßte man testen, habe ich aber jetzt keine Zeit zu.

Gruß,
Christian
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Carsten1983 hat geschrieben:Ich suche nun eine Möglichkeit, wie ich das weniger umständlich machen kann, als mit schleifen. Gibts da nicht irgendeinen Befehl?
Egal was es da geben könnte: Intern muss irgend wann sowieso mit einer Schleife gearbeitet werden! Wie sollte das auch anders gehen, ohne jedes Element einmal angefasst zu haben?
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich denke mal eher, dass es in solchen Fällen um Lesbarkeit und Handlichkeit geht. Dass da auf C-Ebene eine Schleife gemacht werden muss, sollte klar sein.
Carsten1983
User
Beiträge: 20
Registriert: Montag 9. Juni 2008, 14:17
Wohnort: Halle/Saale

Danke für die Antworten. :D
Antworten