22.3 반복문으로 리스트의 요소를 모두 출력하기

리스트에 인덱스를 지정하여 요소를 한 개씩 출력하기는 상당히 귀찮죠? 이번에는 리스트와 반복문을 사용하여 간단하게 모든 요소를 출력해보겠습니다.

22.3.1  for 반복문으로 요소 출력하기

 for 반복문은 그냥 in 뒤에 리스트를 지정하면 됩니다.

for 변수 in 리스트:
     반복할 코드

다음은 for로 리스트 a의 모든 요소를 출력합니다.

>>> a = [38, 21, 53, 62, 19]
>>> for i in a:
...     print(i)
...
38
21
53
62
19

for i in a:는 리스트 a에서 요소를 꺼내서 i에 저장하고, 꺼낼 때마다 코드를 반복합니다. 따라서 printi를 출력하면 모든 요소를 순서대로 출력할 수 있습니다.

물론 in 다음에 리스트를 직접 지정해도 상관 없습니다.

for i in [38, 21, 53, 62, 19]:
    print(i)

22.3.2  인덱스와 요소를 함께 출력하기

그럼 for 반복문으로 요소를 출력할 때 인덱스도 함께 출력하려면 어떻게 해야 할까요? 이때는 enumerate를 사용합니다.

  • for 인덱스, 요소 in enumerate(리스트):
>>> a = [38, 21, 53, 62, 19]
>>> for index, value in enumerate(a):
...     print(index, value)
...
0 38
1 21
2 53
3 62
4 19

for index, value in enumerate(a):와 같이 enumerate에 리스트를 넣으면 for 반복문에서 인덱스와 요소를 동시에 꺼내 올 수 있습니다.

앞의 코드는 인덱스를 0부터 출력하는데 1부터 출력하고 싶을 수도 있습니다. 다음과 같이 그냥 index + 1을 출력하면 되겠죠?

>>> for index, value in enumerate(a):
...     print(index + 1, value)
...
1 38
2 21
3 53
4 62
5 19

하지만 좀 더 파이썬 다운 방법이 있습니다. 다음과 같이 enumeratestart를 지정해주면 됩니다.

  • for 인덱스, 요소 in enumerate(리스트, start=숫자):
>>> for index, value in enumerate(a, start=1):
...     print(index, value)
...
1 38
2 21
3 53
4 62
5 19

enumerate(a, start=1)처럼 start에 1을 지정하여 인덱스가 1부터 시작하도록 만들었습니다. 이 코드는 enumerate(a, 1)과 같이 줄여 쓸 수도 있습니다.

참고 | for 반복문에서 인덱스로 요소를 출력하기

for에 리스트를 지정하면 요소를 바로 가져와서 편리한데, for에서 인덱스를 지정하여 요소를 가져올 수는 없을까요? 이때는 rangelen으로 리스트의 길이(요소 개수)를 구해서 넣어주면 인덱스를 순서대로 만들어줍니다. 따라서 a[i]와 같이 리스트에 인덱스를 지정하여 값을 가져올 수 있습니다.

>>> a = [38, 21, 53, 62, 19]
>>> for i in range(len(a)):
...     print(a[i])
...
38
21
53
62
19

즉, for i in range(len(a))를 실행하면 i에는 요소가 아닌 0부터 마지막 인덱스까지 인덱스가 들어갑니다.

22.3.3  while반복문으로 요소 출력하기

이번에는 while 반복문으로 리스트의 요소를 출력해보겠습니다.

>>> a = [38, 21, 53, 62, 19]
>>> i = 0
>>> while i < len(a):
...     print(a[i])
...     i += 1
...
38
21
53
62
19

while 반복문으로 리스트의 요소를 출력할 때는 변수 i를 인덱스로 활용합니다. 먼저 변수 i를 0으로 만들어주고, i < len(a)처럼 i가 리스트의 길이(요소 개수) 직전까지만 반복하도록 만듭니다.

즉, 리스트의 인덱스는 0부터 시작하고 마지막 인덱스는 리스트의 길이보다 1이 작으므로 <를 사용합니다. 만약 i <= len(a)처럼 <=을 사용하면 리스트의 범위를 벗어나게 되므로 주의해야 합니다.

>>> a = [38, 21, 53, 62, 19]
>>> i = 0
>>> while i <= len(a):
...     print(a[i])
...     i += 1
...
38
21
53
62
19
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IndexError: list index out of range

while 반복문 안에서 요소를 출력할 때는 print(a[i])와 같이 리스트의 인덱스 부분에 i를 지정하여 출력합니다. 그다음에는 i가 1씩 증가하도록 만들면 됩니다.

while i < len(a):
    print(a[i])
    i += 1