Mögliche Zustände von n Bits

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
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Hallo,

wie kann ich alle nur möglichen Zustände von n Bits bekommen?
Beispiel:

Code: Alles auswählen

>>> f(3) # 3 bits
[ "111", "000", "100", "001", "110", "011", "010", "101"]
>>>
V.G.
microkernel
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Gehe in einer selbstdefinierten Funktion alle Zahlen von 2^0 bis 2^n durch und füge ihre binäre Darstellung (bin(n) eignet sich dafür, zfill kann die Ergebnisse noch mit Nullen auffüllen) einer Liste hinzu, die du schlussendlich zurückgibst. Oder tue dasselbe in einer List-Comprehension.

Alternativ dürfte das auch mit String-Formatierung hinhauen und würde zfill überflussig machen.
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Danke! Hab es so gelöst:

Code: Alles auswählen

def f(n):
    for i in range(2 ** n):
        yield bin(i)[2:].zfill(n)
Kann man aber auch so lösen:

Code: Alles auswählen

f = lambda n: [bin(i)[2:].zfill(n) for i in range(2**n)]
Zuletzt geändert von microkernel am Donnerstag 19. Januar 2012, 12:51, insgesamt 1-mal geändert.
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Wieso kehrst du die Ergebnisse mittels [::-1] um?
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

:oops: Ich dachte ich müsste das umdrehen, weil zfill die Nullen vor die Zahl dran hängt - Ich hab nicht dran gedacht, dass das eigentlich egal ist
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich werfe mal `itertools.product` in den Raum:

Code: Alles auswählen

In [12]: from itertools import product

In [13]: f = lambda n: product((0, 1), repeat=n)

In [14]: list(f(3))
Out[14]: 
[(0, 0, 0),
 (0, 0, 1),
 (0, 1, 0),
 (0, 1, 1),
 (1, 0, 0),
 (1, 0, 1),
 (1, 1, 0),
 (1, 1, 1)]
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten