Seite 1 von 1

Wert mit Liste vergleichen

Verfasst: Freitag 3. August 2012, 17:05
von hukd321
Hi,

nachdem mir das letzte mal hier schnell und nett geholfen wurde (und das googlen hierbei wieder nichts gebracht hat), frage ich einfach noch mal :)
(Entschuldigung für den schlechten Threadtitel, aber mir fällt es schwer, da einen besseren zu finden)

Ich habe einen double Wert, nennen wir ihn a und setzen wir ihn auf a = 0.34. Jetzt habe ich eine Liste b mit Werten, z.B. b = [0.1, 0.2, 0.3, 0.4, 0.5]

Jetzt sieht man ja, dass a zwischen dem 2. und 3. Listenwert liegt (also zwischen b[1] und b[2])... ich habe noch eine zweite Liste und aus der sollen mir jetzt Werte ausgegeben werden!
Und zwar soll jetzt kommen:

Code: Alles auswählen

print ( a* ( c[ b[1] ] + c [ b[2] ] ) )
(die Leerzeichen sind nur der Übersichtlichkeit wegen)

Ich benötige quasi: gegeben Wert a, Liste b, Liste c

Code: Alles auswählen

a_kleiner = Wertkleiner(b, a)
a_größer = Wertgrößer(b, a)
print a*(c[a_kleiner]+c[a_größer])
Dankeschön :)

Re: Wert mit Liste vergleichen

Verfasst: Freitag 3. August 2012, 17:25
von jbs
Was?

Re: Wert mit Liste vergleichen

Verfasst: Freitag 3. August 2012, 17:34
von lunar
@jbs hukd321 möchte für ein gegebenes "a" in einer Liste "b" die zwei Werte "b1 = a + e1" und "b2 = a - e2" mit e1, e2 > 0 finden, so dass e1 und e2 minimal sind. Besser? ;)

Re: Wert mit Liste vergleichen

Verfasst: Freitag 3. August 2012, 17:39
von Hyperion
Mein Ansatz sähe so aus (Python 3.2)

Code: Alles auswählen

In [16]: value = .34

In [17]: list((i, i+1) for i, border in enumerate(zip_longest(b, b[1:])) if border[0] < value < border[1])
Out[17]: [(2, 3)]
Das in eine Funktion verpacken und sich noch um die Randfälle kümmern... `TypeError` am Schluss und leere Liste bei einem Wert kleiner als der erste Listeneintrag.

Re: Wert mit Liste vergleichen

Verfasst: Freitag 3. August 2012, 18:31
von BlackJack
@hukd321: Falls die Werte in `b` sortiert sind, wäre das `bisect`-Modul aus der Standardbibliothek nützlich.

Re: Wert mit Liste vergleichen

Verfasst: Freitag 3. August 2012, 18:40
von jbs
lunar hat geschrieben:@jbs hukd321 möchte für ein gegebenes "a" in einer Liste "b" die zwei Werte "b1 = a + e1" und "b2 = a - e2" mit e1, e2 > 0 finden, so dass e1 und e2 minimal sind. Besser? ;)
Danke :)

Re: Wert mit Liste vergleichen

Verfasst: Freitag 3. August 2012, 20:47
von hukd321
BlackJack hat geschrieben:@hukd321: Falls die Werte in `b` sortiert sind, wäre das `bisect`-Modul aus der Standardbibliothek nützlich.

und das funktioniert einwandfrei :)
mit

Code: Alles auswählen

bisect.bisect_left(b, a, lo = 0, hi = len(b))
funktioniert es wie gewünscht
ich hab dann für den rechten wert einfach den obigen +1 gerechnet :)


Danke :)

Re: Wert mit Liste vergleichen

Verfasst: Freitag 3. August 2012, 21:14
von BlackJack
@hukd321: `lo` und `hi` brauchst Du nicht zu übergeben wenn Du sowieso nur die Default-Werte dafür angibst.