Liste mit Python ausgeben

(Firma: Schweigstill IT) Persönliche Seite #3685200
Lesenswert?

Ganz einfach: filelist ist keine Liste, auch wenn Du dies durch die 
Namensgebung implizierst. Stattdessen handelt es sich um einen 
Generator. Wenn Du die Fehlermeldung von Python beachtet hättest, hätte 
Dir das auch auffallen müssen:

TypeError: 'generator' object has no attribute '__getitem__'

Bei Generatoren kann man immer nur mit Hilfe der next-Methode auf das 
nächste Element zugreifen und hat keinen wahlfreien Zugriff wie bei 
einer Liste.
Gast #3685206
Lesenswert?

Moin,

os.walk liefert keine Liste zurück sondern einen Gernerator gefüllt mit 
3er-Tuples. Der hat nun mal keinen Direktzugriffoperator (siehe 
Fehlermeldung _getimtem_ fehlt)

Über das Objekt kann man nur iterieren (z.Bsp mit for)
Moderator #3685549
Lesenswert?

Du kannst dir aus dem Generator eine Liste bauen lassen mit
1
realfilelist = list(filelist)

Auf diese Liste kannst du nun auch per Index zugreifen.

Diese Methode hat aber den Nachteil, dass diese Liste (bei entsprechend
vielen Dateien auf der Festplatte) sehr groß werden kann und somit viel
Speicher belegt.

Das ist der Grund, warum die Generatoren in Python eingeführt wurden.
Der Generator braucht fast keinen Speicherplatz, da er die einzelnen
Elemente (in diesem Fall die Namen und Inhalte der jedes Verzeichnisses)
erst generiert werden, wenn sie auch tatsächlich benötigt werden. Damit
darf die Sequenz der generierten Elemente sogar endlos sein.

Diese Vorteile bringen aber die Einschränkung mit sich, dass die
Elemente nur sequentiell gelesen werden können.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren