Zeit - Schleife

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
makuee
User
Beiträge: 11
Registriert: Montag 15. März 2010, 11:20

Hallo zusammen,

ich hätte mal eine Frage zwecks einer Schleife.
Ich habe folgenden Zeitintervall:
Vom 1970:01:01 bis zum 2010:06:01

Jetzt würde ich gern eine Schleife haben, welche mir ausgibt:
1970:01:01
1970:02:01
1970:03:01
...
2010:05:01
2010:06:01

gibt es dafür eine Möglichkeit?

Gruß
Martin
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo Martin,

sofern ich Dich richtig verstanden habe, suchst Du etwas in der Art:

Code: Alles auswählen

import datetime

def schleife(start, ende):
    datelist = []
    while start <= ende:
        datelist.append(start)
        if start.month < 12:
            start = start.replace(month=start.month + 1)
        else:
            start = start.replace(month=1, year=start.year + 1)
    return(datelist)
Gruß
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Oder so:

Code: Alles auswählen

import datetime

def walk_months(startdate, enddate):
    akt = startdate
    while akt <= enddate:
        yield akt.strftime("%Y:%m:%d")
        if akt.month < 12:
            akt = akt.replace(month=akt.month + 1)
        else:
            akt = akt.replace(year = akt.year+1, month = 1)



if __name__ == '__main__':
    start = datetime.date(1970,1,1)
    end = datetime.date.today()
    for d in walk_months(start, end):
        print d
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@.robert
Ich stehe immer wieder vor der Frage: Liste oder Generator? Kannst Du mir sagen, welche Vorteile gerade auch in diesem Beispiel ein Generator gegenüber einer Liste hat? In meinem Kalenderprogramm müssen ja immer wieder Datumsbereiche durchlaufen werden. Ist da ein Generator performanter oder anderweitig von Vorteil?

Gruß
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Ein Generator ist Speicherschonender. Mit der Listen-Methode hältst du ja eine Liste mit allen Werten im Speicher, mit dem Generator immer nur den aktuellen Wert.

Über die Performance kann ich nichts fundiertes aussagen :wink:
makuee
User
Beiträge: 11
Registriert: Montag 15. März 2010, 11:20

hey,

danke zusammen, hab es aber nach einigem getüftel selber hinbekommen.

trotzdem danke für eure bemühungen.

gruß

martin
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

makuee hat geschrieben:hab es aber nach einigem getüftel selber hinbekommen.
Und willst du deine Lösung nicht zeigen? Vielleicht ist die ja besser als die von mutetella oder mir, und wenn noch mal jemand vor einem ähnlichen Problem steht, findet er hier direkt mehrere Lösungen zum Vergleichen.
karolus
User
Beiträge: 144
Registriert: Samstag 22. August 2009, 22:34

Hallo
Als LC:

Code: Alles auswählen

datliste = [ "%s:%02d:01" %(j,m) for j in range(1970,2011) for m in range(1,13)][:-6]
Gruß Karo
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@karolus
Cool! Hier noch die Variante für datetime.date()-Objekte:

Code: Alles auswählen

datliste = [datetime.date(j, m, 1) for j in range(1970,2011) for m in range(1,13)][:-6]
Gruß
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten