Listeneintrag updaten

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
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

wie kann man in einer schleife einen listeneintrag (z.B. das nullte element liste[0] der liste = [0,1,2] mit beispw. einem datepicker)
immer wieder neu ersetze.
mein code zurzeit:

Code: Alles auswählen

text = '%02d' % text # durch klick in einem datepicker wird ein wochentag übergeben
list.insert(0, text)
if len(list) != '2':
     list[0] = text
print list 
ziel für print list ist, immer ausschließlich den aktuellsten wochentag als nulltes element zu haben.
das klappt bei mir noch nicht so richtig...
Zuletzt geändert von DMD am Dienstag 4. August 2015, 18:47, insgesamt 3-mal geändert.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@DMD: list ist ein äußert schlechter Variablenname, weil er den Datentyp list überschreibt. Danach solltest Du Dir nochmal die Grunddatentypen von Python anschauen. '2' ist keine Zahl.

Ganz generell, was willst mit Deiner Liste erreichen? Warum soll das 0. Element ersetzt werden? Warum dann überhaupt eine Liste? Was sind die anderen Elemente der Liste?
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

jo, ich habs.

Code: Alles auswählen

text = '%02d' % text # durch klick in einem datepicker wird ein wochentag übergeben
list.insert(0, text)
if len(list) == 1:
list.insert(0, text)
else:
list[0]=text
print list
ich wollte es erst einmal zum laufen bekommen...:)
jetzt kommt der rest wie namen vergeben, usw

die liste bekommt den namen datum und sieht in der ausgabe so aus:

Code: Alles auswählen

['23', 'August 2015']
['10', 'August 2015']
['26', 'August 2015']
hier wird jetzt das nullte element immer wieder aktualisiert
Zuletzt geändert von DMD am Dienstag 4. August 2015, 18:54, insgesamt 2-mal geändert.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@DMD: Namen sind das erste, was man sich überlegen sollte. Ein guter Name zeigt, dass man das Problem verstanden hat. list ist kein guter Name und um es nochmal deutlicher zu sagen: Eine Liste ist der falsche Datentyp für Dein Problem.
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

ich will es ja noch weiterverarbeiten...
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@DMD: in 99.9% der Fälle ist es sinnvoller, eine Liste erst dann zu erzeugen, wenn sie gebraucht wird und nicht eine Liste zu verändern. Zudem sollten alle Listenelemente gleich sein, also alle Einträge einen Tag entsprechen, Deine Liste enthält aber unterschiedliche Elemente (Tag und Monat) Das würde man mit einem Tuple lösen, oder da es sich um ein Datum handelt, mit dem Python-Datentyp datetime.date.
Benutzeravatar
noisefloor
User
Beiträge: 4253
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

der Code ist doch IMHO so wie so quatsch...

Code: Alles auswählen

 
text = '%02d' % text
list.insert(0, text)
# `text` steht jetzt _immer_ als erster Element der Liste
if len(list) == 1:
    list.insert(0, text)
    #wenn die Liste vor dem 1. `list.insert() leer war, dann steht `text` jetzt 2x in der Liste
    #als erstes und zweites Element
else:
    list[0]=text
    #`text` stand so wie so an erster Stelle und überschreibt sich einfach selber`
print list
Außerdem: Wenn du neue Einträge in eine Liste immer links einfügst, dann kannst du die genau so gut immer rechts einfügen. Gleiches Ergebnis, nur andersrum und ohne `inserts`.

Gruß, noisefloor
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

genau das will ich ja.
ich will durch klick immer nur das aktuell geklickte datum angezeigt bzw. übergeben bekommen,
damit ich dann das jeweilige datum mit weiteren daten z.B. einer banküberweisung oder so
abspeichern kann. so kann ich mehrere nacheinander einzelnd abspeichern. :)
datum auswählen, kohle eingeben und abspeichern,
datum auswählen, kohle eingeben und abspeichern, usw.

apropo: kann man auch in

Code: Alles auswählen

import Tkinter
import calendar
def test():
    import sys
    root = Tkinter.Tk()
    root.title('Ttk Calendar')
    ttkcal = Calendar(firstweekday=calendar.SUNDAY)
    ttkcal.pack(expand=1, fill='both')

    datum = ttkcal.selection  
    print 'Datum is: ', datum  

    if 'win' not in sys.platform:
        style = ttk.Style()
        style.theme_use('clam')
    root.mainloop()
if __name__ == '__main__':
    test()
eine feste größe für den kalender vorgeben?
Benutzeravatar
noisefloor
User
Beiträge: 4253
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
datum auswählen, kohle eingeben und abspeichern,
Dann brauchst du doch gar keine Liste?! Das Datum ist einen Variablenname gebunden, die Kohle auch - reicht. Warum die Extrarunde mit der Liste?

Gruß, noisefloor
DMD
User
Beiträge: 123
Registriert: Sonntag 17. Mai 2015, 03:34

damit ich aus der liste eine tabelle erstellen kann
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@DMD: was ist eine Tabelle? Konsequenterweise erzeugst Du beim Erstellen Deiner Tabellenzeile ein Tuple aus Tag und Monat, und nicht schon im vorhinein eine Liste, die vom logischen Standpunkt aus unsinnig ist.
Benutzeravatar
noisefloor
User
Beiträge: 4253
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
DMD hat geschrieben:damit ich aus der liste eine tabelle erstellen kann
Eine 1-zeilige Tabelle? Wäre es zumindest nach dem Beispiel. Die kannst du auch "on the fly" erzeugen, wenn du die beiden Variablen an Tkinter oder ReportLab übergibst.

Ansonsten wäre es echt mal gut, wenn du nicht nur in Halbsätzen antworten würdest, sondern mal ausführlicher beschreibst, wo du hin willst. Gleiches gilt für die Codebeispiele.

Es mag ja sein, dass deine jetzigen Lösung das ausgibt, was du möchtest, aber es spricht viel dafür, dass der Weg dorthin code-technisch gruselig ist. Und ist unterstelle dir jetzt mal, dass du ein Eigeninteresse daran hast, deine Coding-Skills zu verbessern. Ergo: mehr Infos bitte, sonst wird das nichts.

Gruß, noisefloor
Antworten