Seite 1 von 1

Auslesen einzelner Summanden aus einer Summe

Verfasst: Freitag 14. Dezember 2007, 00:37
von ElSids
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) ?

Re: Auslesen einzelner Summanden aus einer Summe

Verfasst: Freitag 14. Dezember 2007, 08:21
von gerold
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: Alles auswählen

Erklärung:

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

00011011 & 00000010 = 00000010
00011011 & 00001000 = 00001000
00011011 & 00010000 = 00010000
mfg
Gerold
:-)

PS: Das ist ein Dictionary und keine Liste. Nenne es nicht "mylist". :roll:

Verfasst: Freitag 14. Dezember 2007, 11:52
von ElSids
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