【问题标题】:How Can python create tuple of tuple with time elements?python如何创建带有时间元素的元组元组?
【发布时间】:2015-11-09 00:49:59
【问题描述】:

我想创建一个这样的元组:

(('0', '00:00:00'), ('1', '00:30:00'), ('2', '00:01:00') ..., ('46', '23:00:00'), ('47', '23:30:00'))

尝试:

lines = []
a = datetime.timedelta(minutes=0)
for ii in range (48):
    lines.append(a)
    a = a.timedelta(minutes=30)

我尝试了各种方法,但我真的不知道该怎么办?

【问题讨论】:

  • 发布你的尝试..

标签: python for-loop tuples python-datetime


【解决方案1】:

尝试使用列表进行元组转换

l = []
for i in xrange(10):
    l.append(('1', '00:30:00'))   <--- set your data here
t  =tuple(l)   # convert it to tuple

【讨论】:

  • 谢谢,但是我怎样才能每次增加 30 分钟的时间呢?
  • 使用 datetime.timedelta 函数进行创建和 strptime 到字符串的转换
【解决方案2】:

这感觉像是可以使用 datetimetimedelta 对象完成的事情。

对于元组创建元组,我使用了生成器表达式。

>>> from datetime import datetime, timedelta
>>> dt = datetime(1970 ,1 ,1)
>>> t = timedelta(minutes=30)
>>> tuple((str(i), (dt + (i * t)).strftime("%X")) for i in range(48))
(('0', '00:00:00'), ..., ('47', '23:30:00'))
>>>

【讨论】:

  • 我错过了你的回答 :) 感谢您的警告。
【解决方案3】:

您可以使用generator 以 30 分钟的间隔构建时间列表。

def yield_times():  
    start = datetime.combine(date.today(), time(0, 0))
    yield start.strftime("%H:%M:%S")
    while True:
        start += timedelta(minutes=30)
        yield start.strftime("%H:%M:%S")

使用这个生成器,我们可以创建一个元组列表。 48 在这种情况下,是通过生成器的迭代次数。这个range 语句将从0 开始,为我们提供值0 - 47。

gen = yield_times()
tuple_list = []
for ii in range(48):
    tuple_list.append((ii, gen.next()))

最后,我们需要将元组列表转换为元组的元组:

tuple_times = tuple(tuple_list)

完整脚本:

from datetime import date, time, datetime, timedelta
def yield_times():  
    start = datetime.combine(date.today(), time(0, 0))
    yield start.strftime("%H:%M:%S")
    while True:
        start += timedelta(minutes=30)
        yield start.strftime("%H:%M:%S")

gen = yield_times()
tuple_list = []
for ii in range(48):
    tuple_list.append((ii, gen.next()))

tuple_times = tuple(tuple_list)

【讨论】:

  • 谢谢,但是Traceback (most recent call last): File "&lt;input&gt;", line 12, in &lt;module&gt; AttributeError: 'generator' object has no attribute 'next'
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
相关资源
最近更新 更多