Teilstring am Anfang des Textes suchen

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.
Benutzeravatar
snafu
User
Beiträge: 6755
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Nobuddy hat geschrieben:

Code: Alles auswählen

        artikelneu = (
            [r[i] for i in [0, 1, 4, 5, 25]]
            for r in my_reader(infile)
            if tuple(r[:2]) not in artikelvergleich
        )
Zum Verständnis!
Ist meine Annahme richtig, daß die Spaltendefinition von '[r for i in [0, 1, 4, 5, 25]]' in 'my_reader(infile)' übernommen wird?

Also der Ablauf ist: `for`-Schleife über das Ergebnis von `my_reader(infile)`, wobei pro Iteration `r` neu gebunden wird. Danach wird die Bedingung aus der letzten Zeile für das jeweilige `r` überprüft und abhängig davon schließlich das `r` innerhalb der oberen Zeile benutzt, wo der Zugriff über den Index gemacht wird. Trifft die Bedingung für ein `r` in der letzten Zeile nicht zu, dann wird die LC in der ersten Zeile garnicht erst betreten.
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

Hi,

ohne alles genau gelesen zu haben eine spontane Idee. Wenn die Daten sehr, sehr groß sind, könnte man es doch womöglich beschleunigen, wenn man die zu bearbeitenden Listen aufteilt und mit Rekursion untersucht. :K

AlphaX2
Benutzeravatar
pillmuncher
User
Beiträge: 1490
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

sma hat geschrieben:

Code: Alles auswählen

[r[i] for i in [0, 1, 4, 25]]
vs.
[r[0], r[1], r[4], r[25]]
vs.

Code: Alles auswählen

from operator import itemgetter
items = itemgetter(0, 1, 4, 25)
...
items(r)
Ist halt ein Tupel statt einer Liste.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
snafu
User
Beiträge: 6755
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Oder halt als Einzeiler:

Code: Alles auswählen

items = itemgetter(0, 1, 4, 25)(r)
Ist IMHO auch recht elegant gelöst damit.
BlackJack

@snafu: Naja, `itemgetter()` erstellt dabei jedesmal ein neues Funktionsobjekt das nach einmal benutzen wieder verworfen wird. Aber alle diese Objekte machen das gleiche.
Benutzeravatar
snafu
User
Beiträge: 6755
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@BlackJack: Ja, ist aber Geschmackssache, ob man das jetzt wirklich so schrecklich findet. Performancemäßig dürfte der Unterschied nicht auffallen. Wenn man wollte, könnte man bei deiner Lösung ja auch die Zahlenfolge cachen, damit nicht jedes Mal eine neue Liste angelegt wird. :o ;)
Nobuddy
User
Beiträge: 997
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,
Danke für die vielen Infos und auch snafu, für die Erklärung.

Für den Anfang, bin ich wieder ein Schrittchen weiter, verdaue das stückchenweise ... :wink:

Grüße Nobuddy
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

AlphaX2 hat geschrieben:ohne alles genau gelesen zu haben eine spontane Idee. Wenn die Daten sehr, sehr groß sind, könnte man es doch womöglich beschleunigen, wenn man die zu bearbeitenden Listen aufteilt und mit Rekursion untersucht. :K
Wieso sollte das schneller sein? Wenn die Daten sehr groß sind, wird dein Stack sehr groß und irgendwann fliegst du in Python gegen das Rekursionslimit, also gerade für große Datenmengen ist Rekusion (in Python natürlich) nicht das Mittel der Wahl.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten