Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用循环而不是手动输入创建时间列表_Python - Fatal编程技术网

Python 使用循环而不是手动输入创建时间列表

Python 使用循环而不是手动输入创建时间列表,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 +

我正在尝试创建一个列表,从上午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 += 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的解决方案之前用的答案。谢谢