einfügen in eine dynamisch wachsende Listenkopie

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
pyron
User
Beiträge: 12
Registriert: Montag 14. März 2011, 09:33
Wohnort: Ratingen
Kontaktdaten:

Hallo zusammen,

ich sitze schon nun etwas länger an einem Problem:
Ich möchte für ein Layout eine Anzahl datensätze auf dem Layout ausgeben (im Beispiel 3).
Sind keine 3 Datensätze in der gewünschten Reihenfolge verfügbar, soll "" in eine Liste eingefügt werden.

Ich habe also eine gegebene Liste und eine dynamische Listenkopie, die die eingefügten "" beinhaltet.
Da es auch vorkommen kann, dass Werte in der Liste doppelt vorhanden sind, muss ich dann auch in der Listenkopie immer den gewünschten index eines Wertes suchen und an einer Verschobenen Position (Differenz der Listenkopie zu der Liste) einen neuen Wert einfügen.
Da ich so langsam mit meinem Latein am Ende bin, wollte ich fragen, ob ihr mich auf meine Fehler hinweisen könntet?

http://www.python-forum.de/pastebin.php?mode=view&s=229

Liebe Grüße
BlackJack

@pyron: Also mir ist weder aus der Beschreibung noch aus dem Quelltext klar geworden was Du machen willst. Was ist ein „Layout”? Kannst Du die Ausgangsdaten, das gewünschte Ergebnis, und die Beziehung zwischen beidem etwas verständlicher formulieren? Vielleicht auch mit Beispielen. Also insbesondere auch wie das Ergebnis aussehen soll. Da der Quelltext ja anscheinend nicht das liefert, was Du haben möchtest, hat man sonst ja kaum eine Möglichkeit sich vorzustellen wo die Reise hingehen soll.

``global`` auf Modulebene ist sinnlos, das hat keinen Effekt. Man sollte ``global`` sowieso vermeiden.

Musst Du unbedingt in eine Liste etwas einfügen? Wäre es nicht auch möglich einen Algorithmus zu schreiben, der eine neue Liste Element für Element erstellt. Vielleicht könnte man auch über ein `dict` oder `collections.defaultdict` zu einem Ergebnis gelangen.
pyron
User
Beiträge: 12
Registriert: Montag 14. März 2011, 09:33
Wohnort: Ratingen
Kontaktdaten:

Hi BlackJack,

Ziel soll es sein die Liste nachher so auszugeben:
["","",7,4,3,2,1,"",5,4,3,"",5,1,"",5]
Es soll praktisch immer ein "" eingefügt werden, wenn i größer ist als das letzte i. Wegen dem Layout bezieht sich das auf folgendes:

Ich habe ein Blatt und da sind 3 Platzhalter drin:
1
2
3

oben soll immer der Wert stehen, der durch 3 glatt teilbar ist. bzw. unten dann das gegenteil. sollte ich dieses Blatt mit einem Datensatz aus dieser Liste füllen die nicht glatt teilbar ist, muss ich so viele Leere Zeilen einfügen bis das Layout
wieder stabil ist.
Das war mein Gedanke dabei. Ich könnte die Teilbarkeitslogik natürlich auch in mein Template für das Blatt einbauen, aber das war mein erster Ansatz. Klar werden später keine Listenwerte übergeben sondern Tupel mit den Daten, aber ich dachte so könnte ich die Quelldaten separieren.
BlackJack

@pyron: Ich verstehe es immer noch nicht. Ein "" einfügen wenn `i` grösser ist, als das letzten `i`!? Was ist hier denn `i`? Wieso sind nach dieser Regel am Anfang *zwei* leere Zeichenketten in der Liste?

Und die andere Erklärung: Da ist "", "", 7 und dann kommt 4 — was nicht glatt durch drei teilbar ist!? Und die Werte an den Plätzen 2 und 3 sollen einfach nur nicht durch 3 teilbar sein, oder müssen die durch etwas anderes teilbar sein?
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@pyron: Ich verstehe nicht recht, was du erreichen möchtest, aber vielleicht hilft dir ja das hier:

Code: Alles auswählen

def interpose_after_minima(iterable, item):
    iterable = iter(iterable)
    a = next(iterable)
    for b in iterable:
        yield a
        if a < b:
            yield item
        a = b
    yield a


print list(interpose_after_minima([], ''))
print list(interpose_after_minima([1], ''))
print list(interpose_after_minima([7,4,3,2,1,5,4,3,5,1,5], ''))
Ergebnis:

Code: Alles auswählen

[]
[1]
[7, 4, 3, 2, 1, '', 5, 4, 3, '', 5, 1, '', 5]
In specifications, Murphy's Law supersedes Ohm's.
pyron
User
Beiträge: 12
Registriert: Montag 14. März 2011, 09:33
Wohnort: Ratingen
Kontaktdaten:

danke pilmucher,

das ist genau was ich brauche. habe es zwar in der zwischenzeit alleine gelöst, indem ich das template geändert habe und die leerzeilen nicht mehr brauche.
aber deine lösung gefällt mir gut, weil ich die yield sache noch nicht begriffen hatte.
1000 Dank für deine Antwort
Antworten