Seite 1 von 1

Liste streickt

Verfasst: Dienstag 7. September 2010, 18:01
von Py-Prog
Für ein Skript brauch ich eine liste der Binärzahlen von 0-256:

Code: Alles auswählen

ASCII=[00000000, 
       00000001,
       00000010,
       00000011,
       00000100,
       00000101,
       00000110,
       00000111, 
       00001000, 
       ...
       11111111]
Das erste Element kennt Python beim zweiten gibt's ne fehlermeldung. Ich vermutte das es daran liegt dass eine Zahl nicht mit null beginnen kann, wenn ich recht habe wie krieg ich das ohne strings hin, naturlich nur wenn's geht?

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 18:11
von cofi
Binaerzaehlen sind nur eine Repraesentation von Zahlen, anders als mit Strings kommst du dem Problem nicht zurande. Das ist uebrigens ein Tupel und keine Liste.
Binaerliterale haben den Praefix `0b`

Wie immer sind Fehlermeldungen hilfreich ...

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 18:11
von BlackJack
@Py-Prog: Wie willst Du das ohne Zeichenketten hinbekommen? Wenn es Zahlen sein sollen, dann kannst Du auch einfach 0, 1, 2, 3, … hinschreiben. Zahlen sind weder Binär noch Dezimal. Diese Eigenschaft haben nur Zeichenkettendarstellungen von Zahlen.

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 18:17
von Py-Prog
Dann nehm ich strings. (Und noch 512 hochkommas schreiben :roll: )


Danke für die schnelle hilfe.

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 18:22
von cofi

Code: Alles auswählen

for i in range(512):
    print "{0:b}".format(i)

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 18:31
von Py-Prog
Ja, endlich fertig, und wenigstens hat die liste keine fehler ist nämlich auch hand getippt... :oops:

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 18:47
von cofi
Py-Prog hat geschrieben:wenigstens hat die liste keine fehler ist nämlich auch hand getippt... :oops:
Das schliesst sich so ziemlich aus.

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 18:48
von Py-Prog
Was soll das heisen? :K

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 18:51
von numerix
Wenn du die Zahlen von 1 bis 1000 brauchst, schreibst du die dann auch alle "mit der Hand" in eine Liste und lässt sie anschließend ausgeben?

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 19:00
von Py-Prog
Nein, das mache ich nicht mit der hand sondern so:

Code: Alles auswählen

liste=[]
for i in range(1000):
    i.append(liste)
nur geht es in diesem fall schwer. Ich hab auch versucht eine funktion zu schreiben die diese liste erzeut, hat nicht geklappt.

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 19:26
von jbs
mit rekursion:

Code: Alles auswählen

def make_list_of_first_n_ints(deep, n=0):
    if n == deep:
        return []
    return [n]+make_list_of_first_n_ints(deep, n+1)

print make_list_of_first_n_ints(10)

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 20:03
von numerix
Py-Prog hat geschrieben:Nein, das mache ich nicht mit der hand sondern so:

Code: Alles auswählen

liste=[]
for i in range(1000):
    i.append(liste)
Ja, das ist echt praktisch. Dann muss man ja bloß noch die Null vorne abschneiden und hinten die 1000 dranhängen.
Ich hab' es bisher immer so gemacht:

Code: Alles auswählen

from random import randrange

numbers = set()
while len(numbers)<1000:
    numbers.add(randrange(1,1001))
print sorted(numbers)

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 20:23
von jbs
@numerix:

Für sowas gibt es doch sample!

Code: Alles auswählen

from random import sample
print sorted(sample(xrange(1,1001), 1000))

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 20:37
von jerch
Für einen so komplizierten Sachverhalt sollte man niemals den funktionalen Ansatz außen vor lassen:

Code: Alles auswählen

myrange = lambda x, y=0, z=1, l=[] : ((myrange(x,y-1,z,l) if (y-1-x)%z else myrange(x,y-1,z,l+[y-1])) if y>x else l.reverse() or l) if y else (myrange(x=x-1,l=l+[x-1]) if x>0 else l.reverse() or l)
:twisted: SCNR

PS: Funktion verhält sich nicht ganz wie das Original ;)

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 20:49
von EyDu
Py-Prog hat geschrieben:Ja, endlich fertig, und wenigstens hat die liste keine fehler ist nämlich auch hand getippt... :oops:
Deine Aussage solltest du mal prüfen: Bei 256*8 Zeichen und einer Fehler auf 1000 Buchstaben ist mit über 87% ein Fehler dabei. Bei 2/1000 sind es schon 98%, bei 3/1000 bereits 99,8%.

Re: Liste streickt

Verfasst: Dienstag 7. September 2010, 20:54
von jbs
Verdammt, die Rekursionsfunktion geht nicht bis 1000 bei mir :(

Re: Liste streickt

Verfasst: Mittwoch 8. September 2010, 09:55
von Py-Prog
Es gibt immer noch die 13%, Es hätte ja sein können das ich sowas passiert:

Code: Alles auswählen

01011010
(01011011)
01011100
ist es aber nicht.

Re: Liste streickt

Verfasst: Mittwoch 8. September 2010, 13:53
von Py-Prog
Um RAM zu sparren kann man in einigen fällen auch einen Generator verwenden.