Datumsdifferenz aus zwei Listen

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
je_python_mi
User
Beiträge: 7
Registriert: Dienstag 6. Juli 2010, 13:41

Hallo zusammen, ich habe folgendes Problem.

Ich habe zwei Listen, die Datumseinträge im Format JJJJMMTT beinhalten. Die Differenz sollte natürlich für weitere
Berechnungen als float oder integer vorliegen und in eine weitere Liste übergeben werden. Ich habe schon eine Variante, die allerdings die Werte zuvor überschreibt, sodass nur der letzte Wert der Liste stimmt.

Code: Alles auswählen

for i in zul:
            var_tage_zul=lambda i: time.strptime(i, "%Y%m%d")[:3]
            var_tage_zul2=lambda i: datetime.date(*var_tage_zul(i))
            
              
            for j in ausf:
                var_tage_ausf=lambda j: time.strptime(j, "%Y%m%d")[:3]
                var_tage_ausf2=lambda j: datetime.date(*var_tage_ausf(j))

                delta=var_tage_ausf2(j)-var_tage_zul2(i) 

            liste.append((delta).days)
Ich habe auch versucht die Schleifen zu verändern, was logischerweise zu anderen Ergebnissen führt, jedoch nicht zu den richtigen...


Wäre super wenn mir jemand helfen könnte oder eine bessere Variante vorschlagen könnte.

Gruß Jens
Zuletzt geändert von Anonymous am Dienstag 6. Juli 2010, 13:57, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@je_python_mi: Warum definierst Du ständig neue ``lambda``-Funktionen? Der Fehler ist *so* offensichtlich, dass Du den echt selber herausfinden solltest. Und zwar nicht durch herumprobieren bis es irgendwie klappt, sondern durch nachdenken.
je_python_mi
User
Beiträge: 7
Registriert: Dienstag 6. Juli 2010, 13:41

@BlackJack: kannste mir nen Tipp geben. Sollte ich die lambda-Funktionen generell weglassen??!!

Mein Hauptproblem war die Verwendung der Listen mit der Angabe JJJJMMTT und deren Umrechnung gibt es da keine generellen Pakete um Datumsformate besser nutzen zu können?!?!?

Dank nochmals
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

datetime bzw. datetime.timedelta sind deine Freunde.
je_python_mi
User
Beiträge: 7
Registriert: Dienstag 6. Juli 2010, 13:41

@mkesper, ja aber die funktionieren doch nicht mit JJJJMMTT, oder doch?!?!
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

je_python_mi hat geschrieben:

Code: Alles auswählen

for i in zul:
            var_tage_zul=lambda i: time.strptime(i, "%Y%m%d")[:3]
            var_tage_zul2=lambda i: datetime.date(*var_tage_zul(i))
            
              
            for j in ausf:
                var_tage_ausf=lambda j: time.strptime(j, "%Y%m%d")[:3]
                var_tage_ausf2=lambda j: datetime.date(*var_tage_ausf(j))

                delta=var_tage_ausf2(j)-var_tage_zul2(i) 

            liste.append((delta).days)
- Einrückungen sollten jeweils +4 Leerzeichen pro Ebene betragen.
- Für Strings sind i und j ausgesprochen verwirrende Variablennamen.
- Lambdas definieren anonyme Funktionen. Wenn man ihnen Namen gibt kann man sie auch gleich mittels def definieren.
- Funktionsnamen, die mit var_ beginnen, sind nicht wirklich sinnvoll, weil es sich ja um Funktionen, und nicht um Variablen handelt.
- Variablennamen, die mit var_ beginnen, sind nicht wirklich sinnvoll, weil es sich ja sowieso um Variabalen handelt.
- mehrfach dieselbe Funktion mit unterschiedlichen Namen zu definieren ist nicht wirklich sinnvoll.
- Leerzeichen kosten nichts. a=b-c kann man übersichtlicher als a = b - c schreiben.
- Warum (delta).days und nicht einfach delta.days?

Ich habe dein Programm mal verkürzt:

Code: Alles auswählen

def date_from_JJJJMMDD(datestr):
    return datetime.date(*time.strptime(datestr, "%Y%m%d")[:3])

for a in zul:
    tage_zul2 = date_from_JJJJMMDD(a)
    for b in ausf:
        delta = date_from_JJJJMMDD(b) - tage_zul2
    liste.append(delta.days)
Der Fehler sollte jetzt offensichtlich sein. Tipp: die Lösung besteht in 4 spaces.
In specifications, Murphy's Law supersedes Ohm's.
Antworten