2010-03-31 2 views
1

목록 이해를 통해 선언 된 목록에서 열거를 호출하는 일부 코드를 수정합니다.시작 매개 변수를 사용할 때 Python에서 내장 오류를 열거합니다.

self.groups = [Groups(self, idx) for idx in range(n_groups)] 

나중에 :

for idx, group in enumerate(self.groups): 
    # do some stuff 

하지만 시작 매개 변수를 통해 2 목록 요소에서 시작 열거 호출을 변경하는 경우 예를 들어, 이 이유

exceptions.TypeError: 'Group' object is not iterable 

누군가가 설명 할 수 없습니다 :

for idx, group in enumerate(self.groups[1]): 

나는 예외가?

+0

나는를 오해 원래 매개 변수에 "enumerate (self.groups, 1)"라고 써야했는데 실제로는 원래의 카운트 값 이었으므로 실제로 의도 한 것이 아니었고 그 이후의 모든 iterables를 건너 뛰지 않았습니다. 순서의 개시. – TheJuice

답변

2

문제 : 시퀀스에서 단일 인수와 함께 인덱서를 사용하면 시퀀스에서 단일 개체가 생성됩니다. 시퀀스에서 선택한 개체의 형식은 Group이며 해당 형식은 반복 할 수 없습니다.

솔루션 : 만 반복하려는 두 번째에서 시작 을하지 않은

for idx, group in enumerate(self.groups[1:]): 
    # do some stuff 
1

: 특정 인덱스에서 항목의 새로운 순서를 얻을 수 slice construct를 사용하여 두번째. 두 번째 항목에서 시작하려면 수행

for idx, group in enumerate(self.groups[1:]): 
    # process 
1

시퀀스가 ​​itertools 모듈에서 islice 기능을 사용하는 것이보다 충분히 큰 경우는 슬라이스보다 큰 시퀀스에 대한 더 많은 메모리를 효율적이기 때문에 :

import itertools 

for idx, group in enumerate(itertools.islice(self.groups, 1, None)): 
    # process 
관련 문제