首页 > 解决方案 > 如何从此输入中获取此输出“输出-Mon-Wed-7-19 Thu-11-19 Friday-Sat open 24 hours Sun-closed”

问题描述

输入 1:给定这个输入,开始时间 = [7 , 7, 7, 11, 15, 10, 17] 结束时间 = [19, 19, 19, 19, 15, 10, 7]。我尝试了几种方法,如下所示。即使这个解决方案也不正确。我从头到尾尝试过的解决方案,

opening_hrs = [7 , 7, 7, 11, 15, 17, 17]
closing_hrs = [19, 19, 19, 19, 15, 7, 7]
days = ['Mon', 'Tue', 'W', 'Th', 'Fr', 'Sa', 'Su']
tmp = [timings[0]]
out = days[0]
for every in range(len(timings)):
    if timings[every] not in tmp:
        out += '-' + days[every-1]

        out += str(timings[every-1]) + '\n'
        if every != len(timings) -1:
            tmp.append(timings[every])
else:
    if timings[-1] not in tmp:
        out += '-' + days[-1]

        out += str(timings[-1]) + '\n'
        tmp.append(timings[-1])
print(out)

我能够映射事物并在周一到周日的所有日子及其相应的时间返回,但无法返回输出,如果连续几天的时间相同,那么我们应该结合这些日子并显示对他们来说是一个时间(周一至周三——7 至 19 日)。

标签: pythonlist

解决方案


使用 zip() 将日期名称与开始和结束时间结合起来。然后合并具有相同小时数的连续天(从周末开始向后允许从 for 循环中的列表中删除项目):

openTime  = [7 , 7, 7, 11, 15, 10, 17]
closeTime = [19, 19, 19, 19, 15, 10, 7]
days      = ['Monday','Tuesday','Wednesday','Thursday','Friday',
             'Saturday','Sunday']

hours     = [[d,f"{ot}-{ct}" if ot<ct else "24 hours" if ct==ot else "closed"] 
             for d,ot,ct in zip(days,openTime,closeTime)]

for i,(day,time) in enumerate(hours[:0:-1]):      # backwards through days
    if time==hours[5-i][-1]:                      # same times as previous
        hours[5-i][0] += "-" + day.split("-")[-1] # merge into previous
        del hours[6-i]                            # remove merged day entry

        
print(", ".join(f"{days}:{time}" for days,time in hours))

Monday-Wednesday:7-19, Thursday:11-19, Friday-Saturday:24 hours, Sunday:closed

推荐阅读