[Tutor] complex iteration over a list
Tim Peters
tim.peters at gmail.com
Sat Jul 3 15:09:32 EDT 2004
[Michele Alzetta]
...
> This particular problem though is more easily solved !
> I've found that calendar is useless, but datetime.timedelta does it, as
> my startday is a timedelta object (and so is my endday, which I had
> changed to number of days thinking it would make things simpler).
>
> startday = datetime(2004,6,1,8)
> endday = datetime(2004,9,1,8)
>
> def daysinperiod(startday,endday):
> daysinperiod = []
> while startday <= endday:
> daysinperiod.append(startday.day)
> startday = startday + timedelta(days=1)
> return daysinperiod
>
> Eliminates the need for lists with the length of different months,
> eliminates the nightmare of leap-years ...
> Python is always simpler and more powerful than one thinks :-)
Well, often <wink>. A more concise way to spell that is:
def daysinperiod2(startday, endday):
numdays = (endday - startday).days + 1
return [(startday + timedelta(i)).day for i in range(numdays)]
If you pass the number of days you want instead of endday, then it can
be even shorter:
def daysinperiod2(startday, numdays):
return [(startday + timedelta(i)).day for i in range(numdays)]
More information about the Tutor
mailing list