2012-08-07 3 views
1

나는 localtime을 가져 와서 그것을 역전 된 바이너리 배열/목록으로 바꾸려고한다.localtime을 개별 바이너리 목록으로 변환하는 좀 더 간결한 방법이 있습니까?

여기 내 작업 코드 : 나는 가능하면이보다 간결하고 싶다

secs = time.localtime() 
    year, month, day, hour, minute, second, weekday, yearday, daylight = secs 

    seconds_string = "{0:#b}".format(second) 
    seconds_string = seconds_string[2:] 
    seconds_list = list(seconds_string[::-1]) 

    minutes_string = "{0:#b}".format(minute) 
    minutes_string = minutes_string[2:] 
    minutes_list = list(minutes_string[::-1]) 

    hours_string = "{0:#b}".format(hour) 
    hours_string = hours_string[2:] 
    hours_list = list(hours_string[::-1]) 

하지만, 다음과 같은 시도는 작동하지 않습니다.

seconds_list = list("{0:#b}".format(second)[2::-1]) 

누락 된 방법이 있습니까? 당신이 원하는 무엇

답변

3

실제로 구문은 조금 이상한

seconds_list = list("{0:#b}".format(second)[:1:-1]) 

이다; 슬라이스는 from:to:step입니다. 이것은 fromNone이고, to이 1이고, 단계가 -1입니다. 단계가 부정적 일 때, from은 문자열의 끝을 기본값으로 사용하므로 "문자열의 끝에서부터 역방향이지만 위치 1은 포함하지 않습니다."를 의미합니다.

+1

고마워요! 그것은 또한'seconds_list = list (bin (second) [: 1 : -1])'와 함께 작동합니다. – Splendor

1

예, 있습니다 :

>>> ''.join('{0:#b}'.format(x)[2:] for x in time.localtime()) 
'11111011100100011110001111001110011110111001' 

방금 ​​말에 [::-1]을 추가 할 수 있음을 역으로.

하지만 그렇게하지 않아도됩니다. 짧은 코드 위에 선명도를 넣으십시오.

+0

여기서'map'을 사용하지 않고 생성자 표현식을 사용하면 훨씬 더 명확 해집니다. IMO :' ''.join (time.localtime()의 [{0 : #b} '. format (x) [2 :] [:: - 1]'. – Dougal

+0

@Dougal :'map' 대 list comprehension (또는 generator)에 관해서는, 이것은 확실히 개인적인 취향의 문제입니다. 나는 함수가 이미 만들어져 있다면 (단지'lambda'를 피하기 위해)'map'을 선호하고, 새로운 것을 할 때리스트 comprehension을 선호합니다. 당신 말이 맞아요, 발전기가 여기 좋네요. – Tadeck

관련 문제