2011-05-07 5 views
2

24 시간 기반 튜플 (숫자)과 12 시간 기준 문자열 표현의 튜플 인 목록을 만들고 싶습니다. 나는이시간 목록 작성의 깔끔한 방법

hours = [(0,"12 AM")] 
hours += [(hour,str(hour) + " AM") for hour in range(1, 12)] 
hours += [(12,"12 PM")] 
hours += [(hour+12,str(hour) + " PM") for hour in range(1, 12)] 

같은 것을 얻을 수있었습니다

[(0, "12 AM"), (1, "1 AM), ..., (13, "1PM"), ... ] 

그러나 나는이 일을하는 청소기 방법이 있다고 생각하지만, 할 수 없습니다 :

형식은 다음과 같이 될 것이다 그것을 알아 내라.

답변

7
import datetime as dt 
hours = [(i, dt.time(i).strftime('%I %p')) for i in range(24)] 
+1

광산, 하지만 0이 아닌 패딩 된 시간에 % l을 원하지 않으십니까? (백분율 - 대문자 - 백 퍼센트와 비교하여 소문자 - 엘) –

+0

가장 훌륭하고 읽기 쉬운 접근 방식. – zeekay

+0

% l (ell)이 (가) 내가 원하는 것입니다. – staackuser2

3
>>> hours = [(n, "%d %s" % (n % 12 or 12, ["AM", "PM"][n > 11])) for n in range(24)] 
>>> hours 
[(0, '12 AM'), (1, '1 AM'), (2, '2 AM'), (3, '3 AM'), (4, '4 AM'), (5, '5 AM'), (6, '6 AM'), (7, '7 AM'), (8, '8 AM'), (9, '9 AM'), (10, '10 AM'), (11, '11 AM'), (12, '12 PM'), (13, '1 PM'), (14, '2 PM'), (15, '3 PM'), (16, '4 PM'), (17, '5 PM'), (18, '6 PM'), (19, '7 PM'), (20, '8 PM'), (21, '9 PM'), (22, '10 PM'), (23, '11 PM')] 
+0

일부 python purists 아마 2 요소 배열에 인덱스로 부울의 사용에 질식 것입니다 모두를 기쁘게하지 않을 수 있습니다. –

+0

하하! 그건 내가 가장 좋아하는 부분이다 : D – zeekay

+0

Alex Martelli가 믿을 때가 아니라면 http://stackoverflow.com/questions/3174392/is-it-pythonic-to-use-bools-as-ints/3175293#3175293 – ThomasH

0

여기 당신을 위해 다른 한 줄 입니다 :

def dayrange(start_date): 
for n in range(25): 
    yield start_date + i*timedelta(hours = 1) 

시작일 A를 :

[(hour24, '%d %s' % (hour12, (lambda x: 'AM' if x < 12 else 'PM')(hour24))) for hour12, hour24 in zip(([12]+range(1, 12)*2), range(0, 24))] 
0

나는 또한 내가 발전기로 사용하고 대안을 발견 datetime.datetime 객체.

관련 문제