2013-05-01 5 views
0

에서 반복하는 동안이목록 색인 목록 길이

sortings_list = ['code', 'name'] 


for i in xrange(0, len(sortings_list)): 
     if sortings_list[i] == '-%s' % field: 
      sortings_list.pop(i) 

어떤 아이디어가 추천 항목으로 구성 sortings_list 다음 코드?

+0

'필드 '란 무엇입니까? –

답변

5

반복하는 동안 목록에서 항목을 제거하는 경우 첫 번째 항목을 제거하면 두 번째 항목의 색인 으로 변경됩니다. 목록 이해력을 대신 사용하십시오 :

sortings_list = [elem for elem in sortings_list if not elem == '-%s' % field] 
1

당신은 그것을 제거하는 첫 번째 항목에 대해 pop()을 호출하고 있으며 이제 목록에는 하나의 요소 만 있습니다.

그런 다음 더 이상 존재하지 않는 두 번째 항목으로 반복하려고합니다.

0

색인 생성이 지저분하기 때문에 목록 이해를 사용하는 것이 좋습니다. 파이썬에서는 대부분의 경우 목록을 색인 할 필요가 없습니다. 즉, 솔루션을 계속 사용하기를 원한다면 :

for i in xrange(len(sortings_list) - 1, -1, -1): 
    if ...: 
     sortings_list.pop(i) 

즉, 목록의 끝에서부터 시작하여 뒤로 이동하십시오. 이렇게하면 모든 색인 생성이 여전히 작동합니다. 다시 말하지만, 나는 이런 식으로 일하는 것에 대해 적극 추천합니다. Martijn Pieters가 제공하는 목록 독해력으로 이동하십시오.