neue Liste erzeugen

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.
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

neue Liste erzeugen

Beitragvon gorba » Mittwoch 30. August 2006, 09:55

Wiso funktioniert folgende strucktur nicht? Ich kriege es nicht hin, dass new als liste "anerkannt" wird. :S

Code: Alles auswählen

def ordData(strD):
   i = 0
   new = []
   while(i<len(strD)):
      new[i] = ord(strD[i])
      i = i + 1
   return new
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Beitragvon pr0stAta » Mittwoch 30. August 2006, 10:11

Weil du mit

Code: Alles auswählen

new[i]

auf ein Listenelement zugreifst und diesem
dann nichts zuweisen kannst. Dies wäre die passende
Syntax für ein Dictionary
Was du willst ist:

Code: Alles auswählen

new.append(EINTRAG)
Zuletzt geändert von pr0stAta am Mittwoch 30. August 2006, 10:13, insgesamt 2-mal geändert.
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Beitragvon Nirven » Mittwoch 30. August 2006, 10:12

Wie wäre es damit?

Code: Alles auswählen

def ordData(strD):
    new = []
    for i in strD:
        new.append(ord(i))
    return new
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

Beitragvon gorba » Mittwoch 30. August 2006, 10:12

denke hab die Lösung gefunden:

Code: Alles auswählen

def ordData(strD):
   i = 0
   new = list()
   while(i<len(strD)):
      val = ord(strD[i])
      new.append(val)
      i = i + 1
   return new


thx pr0stAta für die Hilfe
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Mittwoch 30. August 2006, 10:13

es WIRD als Liste anerkannt. In python haben Listen jedoch die Eigenschaft, dass das Zuweisen von nichtexistenten Indizes ein Fehler ist.

Genauer, bei

Code: Alles auswählen

new[i] = ord(strD[i])

existiert der Index 0 nicht, die Liste ist leer.

Um deinen Code zum laufen zu bringen, würde es reichen, stattdessen

Code: Alles auswählen

new.append(...)

zu schreiben.

Allerdings geht das ganze noch einfacher.
1. musst du nicht über indizes Iterieren,

Code: Alles auswählen

def ordData(strD):
  new = []
  for char in strD:
    new.append(ord(char))
  return new


wäre da die bessere Lösung.
Und wenn man dann 2. noch "list comprehensions" kennt, kann man folgendes machen:

Code: Alles auswählen

def ordData(strD):
  return [ ord(char) for char in strD ]

und hat das gleiche.
BlackJack

Beitragvon BlackJack » Mittwoch 30. August 2006, 12:37

Es ginge auch: ``new = map(ord, string)``
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

Beitragvon gorba » Mittwoch 30. August 2006, 13:53

wow, sehr kompakt. Ich brauchte sehr viel mehr Zeilen um das Problem zu lösen. In zukunft werde ich mich von index fernhalten ;) Thx

Kann ich eigentlich in Python ein dubbleword in ein word konvertieren? Ich habe das bis jetzt so gemacht:

Code: Alles auswählen

   SizeOfImage = 0x01020304
   word2 = SizeOfImage & 0x0000FFFF
   tmp2 = SizeOfImage >> 16
   word3 = tmp2 & 0x0000FFFF


Aber das liefert dann komische ausgaben mit einem L hinter dem Wert :S

edit: bez. von dubbleword zu zwei einzelnen word
BlackJack

Beitragvon BlackJack » Mittwoch 30. August 2006, 17:05

Mal abgesehen davon das es "doubleword" heisst, ist Deine Methode schon die richtige. Kann man natürlich auch wieder kompakter schreiben:

Code: Alles auswählen

doubleword = 0x01020304
low_word, high_word = doubleword & 0x0000FFFF, doubleword >> 16 & 0x0000FFFF


Das `L` ist nur ein Kennzeichen dafür, das es sich um ein Objekt vom Typ `long` handelt. Das kannst Du in den allermeisten Fällen einfach ignorieren.
Benutzeravatar
Michael Schneider
User
Beiträge: 566
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Beitragvon Michael Schneider » Mittwoch 30. August 2006, 22:38

Hi,

Python hat einen Typ doubleword? Soviel ich weiß hat es nur Integer (4 Bytes ) und Long, wobei long nur vom Speicher des Rechners begrenzt wird - also auch mehrere Millionen stellen haben kann. Bitte korrigiert mich, wenn ich ein falsches Python-äh-Weltbild habe. :-)

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
BlackJack

Beitragvon BlackJack » Donnerstag 31. August 2006, 11:39

Nein, dein Weltbild ist in Ordnung. Kannst aufatmen. :-)
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

Beitragvon gorba » Donnerstag 31. August 2006, 14:46

danke für die super hilfen! Hat mir weitergeholfen, auch wenn ich immernoch zuviele Zeilen brauche um das ganze zu codieren :)
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Freitag 1. September 2006, 02:31

BlackJack hat geschrieben:Es ginge auch: ``new = map(ord, string)``


ok, du hast gewonnen ;)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder