Python增量日/时间表

时间:2014-07-28 13:35:01

标签: python time schedule

我有一个基于日期和时间安排的脚本。下面的示例如下:

schedule_time = ['06:00','06:30','07:00','07:30','08:00','08:30','09:00','09:30','10:00','10:30','11:00','11:30','12:00','12:30','13:00','13:30','14:00','14:30','15:00','15:30','16:00','16:30','17:00','17:30','18:00','18:30','19:00','19:30']
schedule_day = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
names = ['John', 'Sam', 'Ralph', 'Joe']

我在创建计划时遇到问题。使用我当前的代码,我得到每个名称的日期/时间输出:

for day in schedule_day:
    for time in schedule_time:
        for name in names:
            print day, time, name

我收到的输出是:

Monday 06:00 John
Monday 06:00 Sam
Monday 06:00 Ralph
Monday 06:00 Joe
Monday 06:30 John
Monday 06:30 Sam
Monday 06:30 Ralph
Monday 06:30 Joe
Monday 07:00 John
Monday 07:00 Sam
Monday 07:00 Ralph
Monday 07:00 Joe
Monday 07:30 John
Monday 07:30 Sam

名单可根据需要增长或缩小。我希望安排一个名字到一天和一个时间。如果只有3个名字,那么我希望如下:

Monday 06:00 John
Monday 06:30 Sam
Monday 07:00 Ralph

如果还有更多,我希望得到以下结果:

Monday 06:00 Name1
Monday 06:30 Name2
Monday 07:00 Name3
Monday 07:30 Name4
Monday 08:00 Name5
Monday 08:30 Name6
Monday 09:00 Name7
Monday 09:30 Name8
Monday 10:00 Name9
Monday 10:30 Name10

如果名称多于日期和时间段,我希望输出循环回到周一的“下一周”。 我试过循环,词典和不熟悉这个问题的所有工具。

1 个答案:

答案 0 :(得分:4)

我认为你想要的是:

from itertools import cycle, izip, product

for timeslot, name in izip(cycle(product(schedule_day, 
                                         schedule_time)),
                           names):
    print name, timeslot

此处product用于创建相应的日期 - 时间对,然后cycle重复一次,只要有名称,然后izip将时间段与名称配对