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

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();
$foo[10] = "a";
$foo[20] = "b";
foreach ($foo as $index => $value) {
    echo $index." = ".$value."<br />\n";
}
/* result:
10 = a
20 = b
*/
?>
Gibt es in Python nicht auch ein Array-Objekt? Erfüllt das diese Wünsche?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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

Sollte selbsterklärend sein.

EDIT: Böse URL!
droptix
User
Beiträge: 521
Registriert: Donnerstag 13. Oktober 2005, 21: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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

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

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.
Antworten