Python Language
루프
수색…
소개
프로그래밍에서 가장 기본적인 기능 중 하나 인 루프는 거의 모든 프로그래밍 언어에서 중요한 부분입니다. 루프를 사용하면 개발자는 코드의 특정 부분을 반복이라고하는 여러 루프를 반복하도록 설정할 수 있습니다. 이 주제에서는 여러 유형의 루프와 Python에서 루프 응용 프로그램을 사용하는 방법을 다룹니다.
통사론
- while <boolean expression> :
- <iterable>의 <variable>에 대해 :
- 범위 (<번호>)에있는 <변수>에 대해 :
- 범위 내의 <variable> (<start_number>, <end_number>) :
- (<시작 _ 번호>, <끝 _ 번호>, <단계 크기>) 범위의 <변수>에 대해 :
- i, <변수> in enumerate (<iterable>) : #와 인덱스 i
- zip (<iterable1>, <iterable2>)의 <variable1>, <variable2>
매개 변수
매개 변수 | 세부 |
---|---|
부울 표현식 | 부울 문맥에서 평가할 수있는 표현식, 예 : x < 10 |
변하기 쉬운 | iterable 의 현재 요소에 대한 변수 이름 |
반복 가능한 | 반복을 구현하는 모든 것 |
리스트 반복하기
당신이 사용할 수있는 목록을 반복하기 for
:
for x in ['one', 'two', 'three', 'four']:
print(x)
이렇게하면 목록의 요소가 인쇄됩니다.
one
two
three
four
range
함수는 for 루프에서 자주 사용되는 숫자를 생성합니다.
for x in range(1, 6):
print(x)
결과는 파이썬> = 3의 특수 범위 시퀀스 유형 과 파이썬 <= 2의 목록이됩니다. 둘 다 for 루프를 사용하여 루프 할 수 있습니다.
1
2
3
4
5
당신이 목록의 두 요소하지만 루프 할뿐만 아니라 요소에 대한 인덱스가있는 경우, 당신은 파이썬의 사용할 수있는 enumerate
기능을 :
for index, item in enumerate(['one', 'two', 'three', 'four']):
print(index, '::', item)
enumerate
은 index
(정수)와 item
(목록의 실제 값)으로 압축 된 튜플을 생성합니다. 위의 루프가 인쇄됩니다.
(0, '::', 'one')
(1, '::', 'two')
(2, '::', 'three')
(3, '::', 'four')
map
과 lambda
사용하여 값 조작으로 목록을 반복합니다. 즉, 목록의 각 요소에 람다 함수를 적용합니다.
x = map(lambda e : e.upper(), ['one', 'two', 'three', 'four'])
print(x)
산출:
['ONE', 'TWO', 'THREE', 'FOUR'] # Python 2.x
NB : 파이썬 3.x map
에서 목록 대신 반복자를 반환하므로 결과를 캐스팅해야하는 목록이 필요한 경우 print(list(x))
참조 하십시오 ( http://www.riptutorial.com/python/ 참조) . example / 8186 / map-- http://www.riptutorial.com/python/topic/809/incompatibilities-moving-from-python-2-to-python-3 ).
For 루프
for
루프는 list
또는 dict
와 같은 항목 모음을 반복하고 컬렉션의 각 요소로 코드 블록을 실행합니다.
for i in [0, 1, 2, 3, 4]:
print(i)
위의 for
루프는 숫자 목록을 반복합니다.
각 반복은 i
의 값을 목록의 다음 요소로 설정합니다. 그래서 처음에는 0
, 1
, 2
등이 될 것입니다. 출력은 다음과 같습니다 :
0
1
2
3
4
range
는 반복 가능한 형식으로 일련의 숫자를 반환하는 함수이므로 for
루프에서 사용할 수 있습니다.
for i in range(5):
print(i)
첫 번째 for
루프와 완전히 동일한 결과를 제공합니다. 여기서 범위는 0
부터 세는 처음 5 개의 숫자이므로 5
가 인쇄되지 않습니다.
반복 가능한 객체 및 반복자
for
루프는 __getitem__
또는 __iter__
함수를 정의하는 객체 인 모든 반복 가능한 객체를 반복 할 수 있습니다. __iter__
함수는 반복기의 다음 요소에 액세스하는 데 사용되는 next
함수가있는 객체 인 반복기를 반환합니다.
루프에서 끊기 및 계속하기
break
문
break
문이 루프 내에서 실행되면 제어 흐름이 루프에서 즉시 "중단"됩니다.
i = 0
while i < 7:
print(i)
if i == 4:
print("Breaking from loop")
break
i += 1
루프 조건은 break
문이 실행 된 후에 평가되지 않습니다. break
문은 루프 내 에서만 구문 적으로 허용 됩니다 . 함수 내의 break
문은 해당 함수를 호출 한 루프를 종료하는 데 사용할 수 없습니다.
다음을 실행하면 break
문이 만료되고 루프가 멈출 때까지 숫자 4
까지 모든 자릿수가 인쇄됩니다.
0
1
2
3
4
Breaking from loop
break
문은 for
루프 내부 for
사용할 수 있습니다. 다른 루프 구조는 Python에서 제공합니다.
for i in (0, 1, 2, 3, 4):
print(i)
if i == 2:
break
이 루프를 실행하면 다음과 같이 인쇄됩니다.
0
1
2
루프가 종료되었으므로 3과 4는 인쇄되지 않습니다.
루프 에 else
절이 있으면 break
문을 통해 루프가 종료 될 때 실행되지 않습니다.
continue
진술하다
continue
문은 현재 블록의 나머지 부분을 우회하지만 루프를 계속하는 루프의 다음 반복으로 건너 뜁니다. break
와 마찬가지로 continue
는 루프 내부에만 나타날 수 있습니다.
for i in (0, 1, 2, 3, 4, 5):
if i == 2 or i == 4:
continue
print(i)
0
1
3
5
2
와 4
는 인쇄되지 않는다. 왜냐하면 i == 2
또는 i == 4
때 print(i)
를 계속하지 않고 continue
가 다음 반복으로 넘어 가기 때문이다.
중첩 루프
break
하고 continue
하면 루프의 단일 레벨에서만 작동합니다. 다음 예는 단지 내부 벗어날 것이다 for
루프가 아닌 외부 while
루프 :
while True:
for i in range(1,5):
if i == 2:
break # Will only break out of the inner loop!
파이썬에는 한 번에 여러 수준의 루프를 벗어날 수있는 기능이 없습니다.이 동작이 필요한 경우 하나 이상의 루프를 함수로 리팩터링하고 break
를 return
바꾸는 것이 좋습니다.
함수 내에서 return
를 break
return
문 은 함수 다음에 오는 코드를 실행하지 않고 함수에서 나옵니다.
함수 내부에 루프가있는 경우 해당 루프 내부에서 return
을 사용하면 루프의 나머지 코드가 실행되지 않으므로 break
되는 것과 같습니다 ( 루프 뒤의 코드는 실행되지 않습니다 ).
def break_loop():
for i in range(1, 5):
if (i == 2):
return(i)
print(i)
return(5)
중첩 루프가있는 경우 return
문은 모든 루프를 중단합니다.
def break_all():
for j in range(1, 5):
for i in range(1,4):
if i*j == 6:
return(i)
print(i*j)
출력됩니다 :
1 # 1*1
2 # 1*2
3 # 1*3
4 # 1*4
2 # 2*1
4 # 2*2
# return because 2*3 = 6, the remaining iterations of both loops are not executed
"else"절이있는 루프
for
및 while
복합 명령문 (루프)은 선택적으로 else
절을 가질 수 있습니다 (실제로이 사용법은 매우 드뭅니다).
else
절은 for
루프가 완료 될 때까지 반복되거나 while
조건부 표현식이 false가되어 while
루프가 종료 된 후에 만 실행됩니다.
for i in range(3):
print(i)
else:
print('done')
i = 0
while i < 3:
print(i)
i += 1
else:
print('done')
산출:
0
1
2
done
루프가 다른 방법으로 종료되면 ( break
문이나 예외를 발생 시킴) else
절은 실행되지 않습니다 .
for i in range(2):
print(i)
if i == 1:
break
else:
print('done')
산출:
0
1
대부분의 다른 프로그래밍 언어에는 루프의이 선택적 else
절이 else
. 특히 else
키워드의 사용은 종종 혼란스러운 것으로 간주됩니다.
그러한 절에 대한 원래의 개념은 Donald Knuth에게 돌아갔다. else
키워드의 의미는 구조화 된 프로그래밍 이전 또는 저급 어셈블리 언어에서 if
문 및 goto
문과 관련하여 루프를 다시 작성하면 분명해진다.
예 :
while loop_condition():
...
if break_condition():
break
...
다음과 같습니다.
# pseudocode
<<start>>:
if loop_condition():
...
if break_condition():
goto <<end>>
...
goto <<start>>
<<end>>:
이것들은 각각에 else
절을 첨부하면 동일하게 유지됩니다.
예 :
while loop_condition():
...
if break_condition():
break
...
else:
print('done')
다음과 같습니다.
# pseudocode
<<start>>:
if loop_condition():
...
if break_condition():
goto <<end>>
...
goto <<start>>
else:
print('done')
<<end>>:
else
절이있는 for
루프는 같은 방식으로 이해할 수 있습니다. 개념적으로, 반복 가능한 객체 나 시퀀스가 여전히 남아있는 요소를 가지고있는 한 True로 유지되는 루프 조건이 있습니다.
왜이 이상한 구조를 사용합니까?
for...else
구문의 주요 사용 사례는 다음과 같이 간결한 검색 구현입니다.
a = [1, 2, 3, 4]
for i in a:
if type(i) is not int:
print(i)
break
else:
print("no exception")
이 구조에서 else
이 혼동을 덜 일으키게하려면 " 깨지지 않는 경우 "또는 " 발견되지 않은 경우 "로 생각할 수 있습니다.
이것에 대한 토론은 [Python-ideas] for for ... else threads의 요약 에서 볼 수 있습니다. for 및 while 루프 다음에 'else'를 사용하는 이유는 무엇입니까? , 및 루프 절에 대한 Else 절
사전에 반복
다음 사전을 고려하십시오.
d = {"a": 1, "b": 2, "c": 3}
키를 반복하려면 다음을 사용할 수 있습니다.
for key in d:
print(key)
산출:
"a"
"b"
"c"
이것은 다음과 같습니다.
for key in d.keys():
print(key)
또는 Python 2 :
for key in d.iterkeys():
print(key)
값을 반복하려면 다음을 사용하십시오.
for value in d.values():
print(value)
산출:
1
2
3
키와 값을 반복하려면 다음을 사용하십시오.
for key, value in d.items():
print(key, "::", value)
산출:
a :: 1
b :: 2
c :: 3
Python 2에서 .keys()
, .values()
및 .items()
는 list
객체를 반환합니다. 당신은 단순히 결과 물마루 반복해야하는 경우에는 해당 사용할 수 있습니다 .iterkeys()
, .itervalues()
와 .iteritems()
.
차이 .keys()
및 .iterkeys()
, .values()
및 .itervalues()
, .items()
및 .iteritems()
이다 iter*
방법 발전기이다. 따라서 사전 내의 요소들은 평가 될 때마다 하나씩 산출됩니다. list
개체가 반환되면 모든 요소가 목록에 압축 된 다음 추가 평가를 위해 반환됩니다.
파이썬 3에서 위의 방식으로 인쇄 된 항목의 순서는 순서를 따르지 않습니다.
While 루프
while
루프는 루프 조건이 false 일 때까지 루프 문을 실행합니다. 다음 코드는 루프 문을 총 4 회 실행합니다.
i = 0
while i < 4:
#loop statements
i = i + 1
위의 루프는 좀 더 우아한 for
루프로 쉽게 변환 될 수 있지만 while
루프는 일부 조건이 충족되었는지 확인하는 데 유용합니다. 다음 루프는 myObject
가 준비 될 때까지 계속 실행됩니다.
myObject = anObject()
while myObject.isNotReady():
myObject.tryToGetReady()
while
루프는 조건없이 숫자 (복합 또는 실수) 또는 True
)을 사용하여 실행할 수도 있습니다.
import cmath
complex_num = cmath.sqrt(-1)
while complex_num: # You can also replace complex_num with any number, True or a value of any type
print(complex_num) # Prints 1j forever
조건이 항상 true이면 while 루프는 break 또는 return 문 또는 예외에 의해 종료되지 않으면 영원히 (무한 루프) 실행됩니다.
while True:
print "Infinite loop"
# Infinite loop
# Infinite loop
# Infinite loop
# ...
패스 성명
pass
는 Python 구문 (예 : for
또는 while
루프의 본문 내에서)에서 명령문이 필요한 경우 null 문이지만 프로그래머가 필요하거나 원하는 작업은 없습니다. 이것은 아직 작성되지 않은 코드의 자리 표시 자로 유용 할 수 있습니다.
for x in range(10):
pass #we don't want to do anything, or are not ready to do anything here, so we'll pass
이 예에서는 아무 일도 일어나지 않습니다. for
루프는 오류없이 완료되지만 명령이나 코드는 실행되지 않습니다. pass
사용하면 모든 명령과 액션을 완전히 구현하지 않고도 코드를 성공적으로 실행할 수 있습니다.
마찬가지로 pass
는 while
루프, 선택 및 함수 정의 등에서 사용할 수 있습니다.
while x == y:
pass
목록의 다른 부분을 다른 단계 크기로 반복
긴 요소 목록이 있고 목록의 다른 모든 요소에만 관심이 있다고 가정 해보십시오. 아마도 첫 번째 또는 마지막 요소 또는 목록의 특정 범위의 항목을 검사하기 만하면됩니다. 파이썬은 강력한 인덱싱 내장 기능을 제공합니다. 다음은 이러한 시나리오를 달성하는 방법에 대한 몇 가지 예입니다.
다음은 예제 전체에서 사용되는 간단한 목록입니다.
lst = ['alpha', 'bravo', 'charlie', 'delta', 'echo']
전체 목록 반복
목록의 각 요소를 반복하려면 다음과 같은 for
루프를 사용할 수 있습니다.
for s in lst:
print s[:1] # print the first letter
for
루프는 lst
각 요소에 s를 할당합니다. 그러면 다음과 같이 인쇄됩니다.
a
b
c
d
e
종종 해당 요소의 요소와 색인이 모두 필요합니다. enumerate
키워드는 해당 작업을 수행합니다.
for idx, s in enumerate(lst):
print("%s has an index of %d" % (s, idx))
인덱스 idx
는 각 반복마다 0부터 증가하고, s
는 처리되는 요소를 포함합니다. 이전 스 니펫은 다음과 같이 출력됩니다.
alpha has an index of 0
bravo has an index of 1
charlie has an index of 2
delta has an index of 3
echo has an index of 4
하위 목록 반복
범위를 반복하고 싶다면 (파이썬이 0부터 시작하는 인덱싱을 사용한다는 것을 기억하자) range
키워드를 사용한다.
for i in range(2,4):
print("lst at %d contains %s" % (i, lst[i]))
그러면 다음과 같이 출력됩니다.
lst at 2 contains charlie
lst at 3 contains delta
목록은 슬라이스 될 수도 있습니다. 다음 슬라이스 표기법은 인덱스 1의 요소에서 끝까지 2 단계로 진행됩니다. 두 개의 for
루프는 동일한 결과를 제공합니다.
for s in lst[1::2]:
print(s)
for i in range(1, len(lst), 2):
print(lst[i])
위의 스 니펫은 다음을 출력합니다.
bravo
delta
인덱싱 및 분할 은 자체적 인 주제입니다.
"하프 루프"do-while
다른 언어와 달리 Python에는 do-until 또는 do-while 구문이 없습니다 (조건이 테스트되기 전에 코드가 한 번 실행될 수 있습니다). 그러나, 당신은 결합 할 수 있습니다 while True
와 break
같은 목적을 달성하기 위해.
a = 10
while True:
a = a-1
print(a)
if a<7:
break
print('Done.')
그러면 다음과 같이 인쇄됩니다.
9
8
7
6
Done.
루핑 및 풀기
예를 들어 튜플 목록을 반복하려면 다음을 수행하십시오.
collection = [('a', 'b', 'c'), ('x', 'y', 'z'), ('1', '2', '3')]
이런 식으로 뭔가를하는 대신 :
for item in collection:
i1 = item[0]
i2 = item[1]
i3 = item[2]
# logic
또는 이와 비슷한 것 :
for item in collection:
i1, i2, i3 = item
# logic
다음과 같이하면됩니다.
for i1, i2, i3 in collection:
# logic
이는 튜플이 아닌 대부분의 유형의 iterable에도 적용됩니다.