Seite 1 von 1

list.insert(index, object)

Verfasst: Samstag 23. Dezember 2006, 12:11
von droptix
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?

Verfasst: Samstag 23. Dezember 2006, 12:40
von EyDu
Ja, Dictionaries: http://docs.python.org/tut/node7.html#S ... 0000000000

Sollte selbsterklärend sein.

EDIT: Böse URL!

Nee

Verfasst: Samstag 23. Dezember 2006, 13:27
von droptix
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.

Verfasst: Samstag 23. Dezember 2006, 16:49
von jens
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???

Verfasst: Samstag 23. Dezember 2006, 21:25
von sape
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 :)

Verfasst: Montag 25. Dezember 2006, 22:47
von droptix
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.