Seite 1 von 1

Datumsdifferenz aus zwei Listen

Verfasst: Dienstag 6. Juli 2010, 13:51
von je_python_mi
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

Re: Datumsdifferenz aus zwei Listen

Verfasst: Dienstag 6. Juli 2010, 14:00
von 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.

Re: Datumsdifferenz aus zwei Listen

Verfasst: Dienstag 6. Juli 2010, 14:29
von je_python_mi
@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

Re: Datumsdifferenz aus zwei Listen

Verfasst: Dienstag 6. Juli 2010, 14:42
von mkesper
datetime bzw. datetime.timedelta sind deine Freunde.

Re: Datumsdifferenz aus zwei Listen

Verfasst: Dienstag 6. Juli 2010, 14:45
von je_python_mi
@mkesper, ja aber die funktionieren doch nicht mit JJJJMMTT, oder doch?!?!

Re: Datumsdifferenz aus zwei Listen

Verfasst: Dienstag 6. Juli 2010, 15:19
von pillmuncher
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.