2015-08-16 2 views
2

Я хочу создать кортеж вроде этого:Как может python создать кортеж кортежа с элементами времени?

(('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) 

Я пробовал различные способы, но я не знаю, на самом деле, что я должен делать?

+1

Опубликовать свою оценку empts .. –

ответ

6

Это чувствует, как что-то, что может быть сделано с datetime и timedelta объектов.

Для кортежа создания кортежа я использовал выражение генератора.

>>> 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')) 
>>> 
+2

Я пропустил ваш ответ:) Спасибо за предупреждение. – HeyYO

0

Try список использования с кортежем конвертации

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

спасибо, но как я могу добавить к времени 30 минут каждый раз? – altruistic

+0

использовать функцию datetime.timedelta для создания и strptime для преобразования строк – user1941407

1

Вы можете использовать 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) 
+0

Спасибо, но «Traceback (последний последний звонок): Файл« », строка 12, в AttributeError: объект 'generator' не имеет атрибута 'next'' – altruistic