list.insert(index, object)

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.
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

list.insert(index, object)

Beitragvon droptix » Samstag 23. Dezember 2006, 12:11

Hab ein Problem:

Code: Alles auswählen

foo = []
foo.insert(10, "a")
print foo[0] # a
print foo[10] # IndexError: list index out of range


Wieso bringt foo.insert(10, "a") keinen Fehler? Dort müsste eigentlich schon ein IndexError erscheinen. Anscheinend nimmt Python dann einfach den niedrigsten verfügbaren Index (hier: 0).

Puh, ich vermisse das Array-Verhalten aus PHP in Python :? Ich möchte manchmal einen Wert an einen ganz speziellen Index in einer Liste setzen. Mir ist es dabei bewusst egal, ob einige Index-Nummern zwischendrin unbesetzt sind. In PHP hat auch ein nummerisches Array einen auslesbaren Index:

Code: Alles auswählen

<?php
$foo 
= array&#40;);
$foo[10] = "a";
$foo[20] = "b";
foreach &
#40;$foo as $index => $value) {
    
echo $index." = ".$value."<br />\n";
&
#125;
/* result:
10 = a
20 = b
*/
?>


Gibt es in Python nicht auch ein Array-Objekt? Erfüllt das diese Wünsche?
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Samstag 23. Dezember 2006, 12:40

Ja, Dictionaries: http://docs.python.org/tut/node7.html#SECTION007500000000000000000

Sollte selbsterklärend sein.

EDIT: Böse URL!
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Nee

Beitragvon droptix » Samstag 23. Dezember 2006, 13:27

Nee, Dictionaries entsprechen ja eher assoziativen Arrays. Die können aber keine Zahl als "Identifier" haben... dachte ich bis grad eben noch. Gestern probierte ich ein analoges Beispiel, was nicht gehen wollte:

Code: Alles auswählen

foo = {}
foo[0] = "a"
foo['bar'] = "b"
for i in foo:
   print i, foo[i]
""" results:
0 a
bar b
"""


Uh, wer weiß was ich da falsch gemacht hab.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Samstag 23. Dezember 2006, 16:49

IMHO sagt die 10 bei foo.insert(10, "a") nur, das "a" vor dem zehnten Wert in die Liste eingetragen werden soll... Ist die Liste aber kleiner als 10 Elemente wird die niedrigste Position genommen.

Warum sollte man im Dict keine Zahlen als Keys verwenden dürfen???

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Samstag 23. Dezember 2006, 21:25

jens hat geschrieben:[...]
Warum sollte man im Dict keine Zahlen als Keys verwenden dürfen???
Eben!

Man kann sogar folats oder z.b. eine Instanz von ``class foo(object)`` als key verwenden :)

Code: Alles auswählen

class foo(object):
    pass

mydict = {}

x = foo()
mydict[x] = "spam"

print mydict


OK, in dem Fall ziemlich Sinnfrei aber es geht :D

lg

P.S.: Da kann man mal wider sehen wie Cool und mächtig Python eigentlich ist :)
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21:27

Beitragvon droptix » Montag 25. Dezember 2006, 22:47

Jo, nachdem ich mich deswegen nochmal belesen hatte, kann man zusammenfassen: Als Key für ein Dict kommt alles in Frage, was nicht veränderlich (also "immutable") ist.

Listen sind z.B. nachträglich veränderbar und damit nicht als Key möglich. Tupel sind hingegen quasi "read only" und können als Key eingesetzt werden.

Wer weiß, was ich in meinem ersten Test falsch gemacht hatte... hab ich leider gleich wieder gelöscht.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], darktrym