Auslesen einzelner Summanden aus einer Summe

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.
ElSids
User
Beiträge: 16
Registriert: Montag 25. Juni 2007, 13:15
Wohnort: Corciano/Italien

Auslesen einzelner Summanden aus einer Summe

Beitragvon ElSids » Freitag 14. Dezember 2007, 00:37

Häufig sind scheinbar einfache Aufgaben doch nicht so einfach, auch wenn mann sich schon nah am Ziel wähnt.

Beschreibung des Verwendungszwecks:
In einer wx.Python-Anwendung habe ich eine CheckListBox mit mehreren Auswahlmöglichkeiten. Die Liste stammt aus einem Dictonary.
Beispiel:

Code: Alles auswählen

mylist= {1:"erster",
2:"zweiter",
4:"dritter",
8:"vierter",
16:"fünfter",
32:"sechster"}


Der Anwender kann über die CheckBoxen mehrerer Listenpunkte auswählen.
Zurückgegeben wird eine Liste mit den Keys. Sagen wir, "zweiter, "vierter" und "fünfter" sind ausgwählt, so enthält die Liste [2,8,16].

Dieses Integer der Keys werden summiert zu 26 und in einen Rekord einer Datenbank gespeichert.
Dieses Speichern von Mehrfachwahlen dürfte, denke ich, allgemein bekannt sein

Frage und Problem
Die Summanden der Summe 26 sind eindeutig belegt. Es gibt nur eine Kombinationsmöglichkeit (eben 2,8,16).

Wie lese ich am einfachsten die Summanden wieder aus der gespeicherten Summe aus (bei gegebener obiger Liste mylist) ?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Auslesen einzelner Summanden aus einer Summe

Beitragvon gerold » Freitag 14. Dezember 2007, 08:21

ElSids hat geschrieben:Wie lese ich am einfachsten die Summanden wieder aus der gespeicherten Summe aus (bei gegebener obiger Liste mylist) ?

Hallo ElSids!

Es geht wahrscheinlich einfacher:

Code: Alles auswählen

>>> mydict= {1:"erster",
... 2:"zweiter",
... 4:"dritter",
... 8:"vierter",
... 16:"fünfter",
... 32:"sechster"}
>>> selection = 26
>>> for key, value in mydict.iteritems():
...     if selection & key == key:
...         print value
...     
zweiter
vierter
fünfter
>>>


EDIT:

[code=]Erklärung:

26 = 00011010
2 = 00000010
8 = 00001000
16 = 00010000

00011011 & 00000010 = 00000010
00011011 & 00001000 = 00001000
00011011 & 00010000 = 00010000[/code]
mfg
Gerold
:-)

PS: Das ist ein Dictionary und keine Liste. Nenne es nicht "mylist". :roll:
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
ElSids
User
Beiträge: 16
Registriert: Montag 25. Juni 2007, 13:15
Wohnort: Corciano/Italien

Beitragvon ElSids » Freitag 14. Dezember 2007, 11:52

Vielen Dank,

ich wusste, dass die Lösung nicht so kompliziert sein konnte.
Selbstverständlich handelt es sich um ein Dictonary und nicht um eine Liste.

Auf die Lösung mit '&' zur binären Addition bin ich nicht gekommen.
Ich hatte mit Oktalzahlen herumexperimentiert, ohne sonderliches Ergebnis.

ElSids

Wer ist online?

Mitglieder in diesem Forum: __deets__