Python 使用循环而不是手动输入创建时间列表
我正在尝试创建一个列表,从上午9点到下午5点,每隔30分钟列出一个选项。 e、 gPython 使用循环而不是手动输入创建时间列表,python,Python,我正在尝试创建一个列表,从上午9点到下午5点,每隔30分钟列出一个选项。 e、 g 如果不使用循环或看起来不那么详细的方法,我将如何实现这一点呢?您可以这样做 hours = 9 minutes = 0 n = 10 cal = {} for i in range(n): key = str(hours) + ":" + str(minutes) cal[key] = 10 if i%2 != 0: hours += 1 minutes +
如果不使用循环或看起来不那么详细的方法,我将如何实现这一点呢?您可以这样做
hours = 9
minutes = 0
n = 10
cal = {}
for i in range(n):
key = str(hours) + ":" + str(minutes)
cal[key] = 10
if i%2 != 0:
hours += 1
minutes += 30
if minutes == 60:
minutes = 0
print(cal)
您可以更改运行循环的次数。将条件更改为运行,直到小时数达到所需时间
您还可以进行一些编辑,将密钥设置为09:00而不是9:0
基本上,对于dict,您只需要将键值作为字符串。您可以使用任何想要的字符串,并为其赋值。很简单。你可以做这样的事情
hours = 9
minutes = 0
n = 10
cal = {}
for i in range(n):
key = str(hours) + ":" + str(minutes)
cal[key] = 10
if i%2 != 0:
hours += 1
minutes += 30
if minutes == 60:
minutes = 0
print(cal)
您可以更改运行循环的次数。将条件更改为运行,直到小时数达到所需时间
您还可以进行一些编辑,将密钥设置为09:00而不是9:0
基本上,对于dict,您只需要将键值作为字符串。您可以使用任何想要的字符串,并为其赋值。简单易懂。从9点钟开始创建一个日期时间对象的iterable
import datetime
fmt = '%H:%M'
start = datetime.datetime.strptime('09:00', fmt)
times = (start + datetime.timedelta(minutes=30*i) for i in range(17))
将datetime对象恢复为字符串
times_str = (t.strftime(fmt) for t in times)
两人一组迭代次。这种方法有一种叫做成对的方法。您可以复制粘贴该函数,也可以从需要安装的位置导入该函数
from more_itertools import pairwise
result = ['-'.join(times) for times in pairwise(times_str)]
输出:
>>> print(result)
['09:00-09:30', '09:30-10:00', '10:00-10:30', '10:30-11:00', '11:00-11:30', '11:30-12:00', '12:00-12:30', '12:30-13:00', '13:00-13:30', '13:30-14:00', '14:00-14:30', '14:30-15:00', '15:00-15:30', '15:30-16:00', '16:00-16:30', '16:30-17:00']
您可以用一个函数封装所有内容
import datetime
from more_itertools import pairwise
def timepairs(start:datetime.datetime, steps:int, delta:datetime.timedelta, fmt='%H:%M'):
times = (start + delta*i for i in range(steps + 1))
times_str = (t.strftime(fmt) for t in times)
return ['-'.join(times) for times in pairwise(times_str)]
演示:
从9点钟开始创建一个datetime对象的iterable
import datetime
fmt = '%H:%M'
start = datetime.datetime.strptime('09:00', fmt)
times = (start + datetime.timedelta(minutes=30*i) for i in range(17))
将datetime对象恢复为字符串
times_str = (t.strftime(fmt) for t in times)
两人一组迭代次。这种方法有一种叫做成对的方法。您可以复制粘贴该函数,也可以从需要安装的位置导入该函数
from more_itertools import pairwise
result = ['-'.join(times) for times in pairwise(times_str)]
输出:
>>> print(result)
['09:00-09:30', '09:30-10:00', '10:00-10:30', '10:30-11:00', '11:00-11:30', '11:30-12:00', '12:00-12:30', '12:30-13:00', '13:00-13:30', '13:30-14:00', '14:00-14:30', '14:30-15:00', '15:00-15:30', '15:30-16:00', '16:00-16:30', '16:30-17:00']
您可以用一个函数封装所有内容
import datetime
from more_itertools import pairwise
def timepairs(start:datetime.datetime, steps:int, delta:datetime.timedelta, fmt='%H:%M'):
times = (start + delta*i for i in range(steps + 1))
times_str = (t.strftime(fmt) for t in times)
return ['-'.join(times) for times in pairwise(times_str)]
演示:
熊猫的简短代码:
熊猫的简短代码:
期望的输出是什么样子的?您说您想创建一个字典,但定义了一个列表。对不起,这是我的一个错误,我指的是一个列表。如果您可以选择使用第三方python包,您可以查看dateutil.rrule所需的输出是什么样的?你说你想创建一个字典,但定义了一个列表。对不起,这是我的一个错误,我指的是列表。如果你可以选择使用第三方python包,你可以查看dateutil.rrule,你如何获得OP示例中的字符串?你如何获得OP示例中的字符串?这比我要求的还要多。非常感谢。这比我要求的还要多。非常感谢。这就是我在读timgeb的解决方案之前用的答案。谢谢这就是我在读timgeb的解决方案之前用的答案。谢谢