루프

2010-12-01 3 views
9

은 C에서 다음 코드를 고려하십시오루프

for(int i=0; i<10 && some_condition; ++i){ 
    do_something(); 
} 

내가 파이썬에서 비슷한 쓰고 싶습니다. 내가 생각할 수있는 가장 좋은 버전입니다 : 솔직히

i = 0 
while some_condition and i<10: 
    do_something() 
    i+=1 

, 나는 for 루프를 모방 while 루프를 좋아하지 않는다. 이는 카운터 변수를 늘리는 것을 잊어 버릴 위험이 있기 때문입니다. 이러한 위험을 addressess 또 다른 옵션은 다음과 같습니다

for i in range(10): 
    if not some_condition: break 
    do_something() 

중요 루프 동안 계산하는 것은 아닙니다 해명

  1. some_condition, 오히려 처음에 루프를 시작할지 여부를 지정합니다 내가

Python2.6

말하는 겁니다

  • 를 배치

    선호되는 스타일은 무엇입니까? 이것을하는 더 나은 관용구가 있습니까? 일반적으로

  • +0

    개인적인 취향의 문제라고 생각합니다. – NPE

    +0

    어떤 버전의 파이썬입니까? – khachik

    +1

    파이썬은'do times :'와 같은 구조를 가져야한다고 생각합니다. 사실, 루프 카운터를 실제로 사용하지 않을 것이라고 명시 할 수 있습니다. –

    답변

    7

    는 "range + break"스타일 바람직하다 -하지만 파이썬 2.X에서 (이 주문형 대신 실제로 번호 목록을 만드는 값을 생성) 반복에 대해 xrange 대신 range를 사용합니다.

    하지만 항상 다릅니다. 이 문맥에서 숫자 10은 무엇이 특별합니까? some_condition은 무엇입니까? 등

    응답 업데이트 : some_condition는 "불변 루프는"루프 동안 변경되지 않습니다, 즉 인 것처럼

    소리가 난다. 이 경우, 우리가 먼저 테스트해야합니다 :

    if some_condition: 
        for i in xrange(10): 
        do_something() 
    
    +0

    10과 범위는 단지 for my_array에 대한 예일 수 있습니다. 질문에서 명확하게 알 수 있듯이'some_condition'은 프로그램이 루프를 수행해야하는지 아니면 전혀 건너 뛰지 않아야 하는지를 제어합니다. –

    +0

    버전은 간단하고 작동합니다. 나는 단지 들여 쓰기를 여분으로하고 싶었습니다. 감사합니다. –

    3

    for 루프를 일정한 상한과 파이썬에서 조금 드물다. 당신이 somearray 반복하는 경우, 당신은 할 수 있습니다

    for i in xrange(len(somearray)): 
        if not some_condition: 
         break 
        do_sth_with(i, somearray[i]) 
    

    또는 더 나은 :

    for i, item in enumerate(somearray): 
        if not some_condition: 
         break 
        do_sth_with(i, item) 
    
    8

    이 관련이되지 않을 수 있습니다,하지만 some_condition 인 경우 내가 ... 어떻게 사용하고있는 무슨있다 당신은 몇 가지 요소 목록을 반복 할 때

    def some_condition(element): 
        return True#False 
    
    for i in filter(some_condition, xrange(10)): 
        pass 
    

    당신은 또한이 방법을 사용할 수 있습니다 간단한만큼, 당신은 반복 기능과 filter 항목에 넣어.

    selected = filter(some_condition, to_process) 
    for i, item in enumerate(selected): 
        pass 
    

    이 경우에도 마찬가지 일 수 있습니다. 문제가되는 경우 항목 필터링 방법을 선택해야합니다.

    +1

    또는 더 짧고 읽기 쉽지 않습니다. 'for i in filter (lambda x : True, range (10)) : do_something()' –