2014-11-26 3 views
0

iteritems (dict)이 유용 할 수 있습니다.목록의 조각에있는 이터 아이템

때때로 iteritems는 목록의 조각에 유용 다음과 같이 구현 (조잡)가 될 수 있습니다

import itertools 

class List(list): 
    def iteritems(self, slice=None): 
    if slice is None: return enumerate(self) 
    else: return itertools.izip(range(slice.start,slice.stop,slice.step), self[slice]) 

if __name__ == "__main__": 
    l=List("hAnGtEn") 
    print l 
    print list(l.iteritems()) 
    print list(l.iteritems(slice(1,7,2))) 

출력 :

['h', 'A', 'n', 'G', 't', 'E', 'n'] 
[(0, 'h'), (1, 'A'), (2, 'n'), (3, 'G'), (4, 't'), (5, 'E'), (6, 'n')] 
[(1, 'A'), (3, 'G'), (5, 'E')] 

좀 더 "파이썬"목록 슬라이스 구문이 있나요 그걸 사용해야합니까?

p.s.

range(slice.start,slice.stop,slice.step) 

은 매우 특별한 경우를 잘 처리하지 못합니다. 여기서는 stop=-1, start=None 또는 step=None입니다. 예제 범위/슬라이스 구현도 어떻게 향상시킬 수 있습니까?

+1

작업 코드 개선에 대한 토론은 codereview.stackexchange.com에 속합니다. – chepner

+0

참고 : 다음 주소로 다시 게시 : http://codereview.stackexchange.com/questions/70959/iteritems-on-a-slice-of-a-python-list – NevilleDNZ

답변

0

이에 대한 iterools.islice를 사용할 수 있습니다

가 반복 가능한에서 선택한 요소를 반환하는 반복자를 확인합니다. start가 0이 아니면 시작에 도달 할 때까지 iterable의 요소를 건너 뜁니다. 이후에, step은 항목을 건너 뛴 결과보다 높게 설정되지 않으면 요소는 연속적으로 리턴됩니다. stop이 None이면 반복자가 모두 사용될 때까지 반복이 계속됩니다. 그렇지 않으면 지정된 위치에서 정지합니다.

그러나 문서는 시작, 중지 또는 단계에 대해 음수 값을 지원하지 않는다는 점에 유의합니다.

관련 문제