Seite 1 von 1

Mögliche Zustände von n Bits

Verfasst: Donnerstag 19. Januar 2012, 12:01
von microkernel
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

Re: Mögliche Zustände von n Bits

Verfasst: Donnerstag 19. Januar 2012, 12:12
von webspider
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.

Re: Mögliche Zustände von n Bits

Verfasst: Donnerstag 19. Januar 2012, 12:32
von microkernel
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)]

Re: Mögliche Zustände von n Bits

Verfasst: Donnerstag 19. Januar 2012, 12:39
von webspider
Wieso kehrst du die Ergebnisse mittels [::-1] um?

Re: Mögliche Zustände von n Bits

Verfasst: Donnerstag 19. Januar 2012, 12:51
von microkernel
: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

Re: Mögliche Zustände von n Bits

Verfasst: Donnerstag 19. Januar 2012, 13:00
von Hyperion
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)]