0

내가 코드의 원래 조각을했다 함축효율적인 방법은

self.newList = [x[1].rstrip() for x in enumerate(rawFile) if x[0]%2 == 0] 
self.timeStamp = ['0' for x in self.newList[]] 

두 번째 질문은 분명히 나에게 '불쾌한'것처럼 보이지만 실제로는 한 번의 반복을 수행해야한다는 사실을 여전히 싫어합니다. 이것은 열띤 질문 일지 모르지만, 누군가가이 이해를 한 반복/행에서보다 효율적으로 수행 할 수있는 방법을 알고 있습니까?

self.newList, self.timeStamp = zip(*((x.rstrip(), '0') for i, x in enumerate(rawFile) if i%2==0)) 

효율성에 대해 아무것도 말할 수 없다, 그러나 한 라이너 :

+0

IMO, 원래 코드에는 별다른 차이가 없습니다. 그것은 분명하고 요점입니다. 유일한 변화는'enumerate()'를 사용하는 것입니다. – NPE

+0

@NPE : 네, 알아요. 파이썬 스타일의 코딩에 익숙해 지려고 애쓰는 중입니다. 애완 동물 프로젝트로 배우면서, "할 수있을 때 이해하기"라고 생각했습니다. – eazar001

+1

http://www.python.org/dev/peps/pep-0020/ - 이것은 언어 자체에 관한 Python으로 작성된 코드에 많이 적용됩니다. – NPE

답변

2

이보십시오. 내가 의도적으로 지능형리스트를 사용하지 않는 한

for lineno, line in enumerate(rawFile): 
    if lineno % 2 == 0: 
     self.newList.append(line.rstrip()) 
     self.timeStamp.append('0') 

참고 : 당신이 뭔가 더 파이썬을 찾고 있기 때문에

+0

hmmm, 튜플리스트를 지퍼로 묶는 것이 좋지만 그곳에서'*'는 무엇을하고 있습니까? – eazar001

+0

@ eazar001 두 개의 요소 튜플 대신에'zip' 출력을 두 개의 분리 된리스트로 만듭니다. 그것은 본질적으로 전치 * 기능입니다. – Volatility

+0

아주 좋은 ... 파이썬은 나를 놀라게하는 것을 결코 멈추지 않는다, 당신의 도움에 감사한다! – eazar001

2
from itertools import islice 
self.newList = [x.rstrip() for x in islice(rawFile, 1, None, 2)] 
self.timestamp = ['0'] * len(self.newlist) 
+0

도움 주셔서 감사합니다! – eazar001

1

, 여기에 내 제안이다. 그들이 그렇듯이, 나는 그들이이 특별한 경우에 많은 도움이된다고 생각하지 않는다.

+0

감사합니다. 귀하의 답변이 정확하게 문제를 해결하지 못했지만, 귀하가 맞습니다 ... 이것이 가장 'Pythonic'이며 효율적입니다. 나는 또한 나의 최종 스크립트에서 당신의 솔루션을 사용하는 것을 끝냈다. [= – eazar001