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

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

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

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

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

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

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

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

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: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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

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

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

BlackJack hat geschrieben:Es ginge auch: ``new = map(ord, string)``
ok, du hast gewonnen ;)
Antworten