python - 如何从此输入中获取此输出“输出-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 日)。
解决方案
使用 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
推荐阅读
- java - Java 客户端库的 Dialogflow Fulfillment
- ios - 出现键盘时调整IOS WKWebView的大小
- python - 从字符串中删除 shell 转义字符
- javascript - 知道如何解决这个问题,所以我没有得到 Javascript TypeError:'in' 的右侧应该是一个对象,得到字符串
- bash - Bash Shell计算MAC OS中文件夹内所有视频持续时间的总和
- flutter - 同时调用多个 http 端点,合并结果并返回到 dart 中的单个 futurebuilder
- reactjs - React 组件的类型声明首选项
- c - 表达式必须具有指向结构或联合的指针类型?
- c# - 在按钮单击事件中执行函数/方法
- matplotlib - Matplotlib 中的加色组合:将红色和绿色组合成黄色