본문 바로가기
프로그래밍/파이썬 Python

[파이썬] 2-2. 반복문 - for문(range,리스트)[입문,초보용 문법] - 질문으로 공부하는

by it-수다쟁이증후군 2023. 4. 1.

오늘.ssam)
지난 포스팅에서는 제어문(if-elif-else)에 대해서 알아보았습니다. 오늘은 for문에서 대해서 알아보려 합니다. 그리고 for문을 공부하려면 자연스럽게 따라오는 순서있는(sequential) , 순회가능한(iterable) 자료형의 기초적인 내용까지 포함될 것입니다.

2-2 반복문-for문 이라는 글자들을 타이포그래피로 만든 썸네일
오늘 내용 압축 썸네일

(*오늘 내용을 보기 전에 지난 포스트 2-제어문-조건문과 반복문에 있는 2번 질문을 확인하기를 추천합니다.)

Q1.나)
for문 에 대해서 설명해 주세요.

A1.ssam)
for 문은 반복문 중 하나로, 주어진 순서(sequence)에서 항목을 하나씩 꺼내어 반복 작업을 수행합니다. for 문은 리스트, 튜플, 문자열 등의 순서(sequence) 자료형을 순회(iteration)하며, 자료형의 첫 번째 항목부터 마지막 항목까지 하나씩 꺼내어 사용합니다.

예를 들어, 다음은 for 문을 사용하여 리스트의 모든 항목을 출력하는 예시입니다.

fruits = ["apple", "banana", "cherry"]

for fruit in fruits:
print(fruit)

위 코드에서 fruits 리스트의 모든 항목을 반복적으로 출력하기 위해 for 문을 사용합니다. for 문에서는 fruits 리스트의 항목을 fruit 변수에 할당하여 반복 작업을 수행합니다. 따라서 위 코드를 실행하면, fruits 리스트의 모든 항목이 순서대로 출력됩니다.

for 문은 range() 함수를 사용하여 범위를 지정할 수도 있습니다.

Q2.나)
range() 함수를 사용하여 범위를 지정할 수도 있다는 게 무슨 말인지 모르겠어요. range() 함수에 대해서 알려주세요

A2.ssam)
range() 함수는 주어진 범위에서 일정한 간격으로 숫자를 생성하는 데 사용됩니다.

예를 들어, 다음은 range() 함수를 사용하여 0부터 4까지의 숫자를 생성하는 예시입니다.

for i in range(5):
print(i)

위 코드에서 range(5)는 0부터 4까지의 범위를 생성합니다. for 문에서는 range(5)에서 생성된 숫자를 i 변수에 할당하여 반복 작업을 수행합니다. 따라서 위 코드를 실행하면, 0부터 4까지의 숫자가 순서대로 출력됩니다.

range() 함수는 start, stop, step 인자를 받아들일 수 있으며, 범위를 지정하여 숫자를 생성하는 데 사용됩니다.

Q3.나)
range() 함수는 start, stop, step 인자 를 어떻게 사용한다는 거죠?

A3.ssam)
range() 함수를 사용하여 범위를 지정할 수 있는 방법에 대한 내용을 정리하면 다음과 같습니다.

  • range() 함수는 주어진 범위에서 일정한 간격으로 숫자를 생성하는 데 사용됩니다.
  • range() 함수는 start, stop, step 인자를 받아들이며, 기본적으로 start는 0, step은 1로 설정됩니다. stop은 지정된 범위보다 1 큰 숫자까지 생성됩니다.
  • range() 함수를 사용하여 0부터 시작하는 범위를 생성하려면 range(stop) 형태로 사용합니다.
  • range() 함수를 사용하여 시작 숫자를 지정한 범위를 생성하려면 range(start, stop) 형태로 사용합니다.
  • range() 함수를 사용하여 시작 숫자와 간격을 지정한 범위를 생성하려면 range(start, stop, step) 형태로 사용합니다.

다음은 range() 함수를 사용하여 2부터 10까지 2씩 증가하는 범위를 생성하는 예시입니다.

for i in range(2, 11, 2):
print(i)

위 코드에서 range(2, 11, 2)는 2부터 10까지 2씩 증가하는 범위를 생성합니다. for 문에서는 range(2, 11, 2)에서 생성된 숫자를 i 변수에 할당하여 반복 작업을 수행합니다. 따라서 위 코드를 실행하면, 2부터 10까지 2씩 증가하는 숫자가 순서대로 출력됩니다.

Q4.나)
그럼 리스트도 range() 함수처럼 start, stop, step 인자 사용할 수 있나요?

A4.ssam)
네, 가능합니다. fruits 리스트를 for 문에 사용하는 방법입니다.

fruits = ["apple", "banana", "cherry", "durian", "elderberry", 
                     "fig", "grape", "honeydew", "iambic", "jackfruit"]

for fruit in fruits[1:len(fruits):2]:
print(fruit)

위 코드에서는 fruits 리스트에서 인덱스 1부터 마지막 항목까지 2씩 증가하면서 출력하는 코드입니다. 출력 결과는 인덱스가 홀수인 항목이 출력됩니다.

banana
durian
fig
honeydew
jackfruit

이렇게 리스트 슬라이싱을 사용하여 범위를 지정할 수 있습니다. 오늘은 이런 것이 있다 정도로만 알아두시고 본격적인 내용은 리스트자료형에서 알아보겠습니다.

Q5.나)
for문 사용에 대해서 주의해야 할 점 있나요?

A5.ssam)
for문을 사용할 때 주의해야 할 점은 다음과 같습니다.

  1. 인덱스 오류: 리스트나 배열 등 순서가 있는 자료형을 사용할 때는 인덱스 범위를 초과하지 않도록 주의해야 합니다.
  2. 반복문 중간에 빠져나오기: 반복문에서 중간에 반복을 중단하거나 다음 반복으로 건너뛰는 경우가 있습니다. 이 때는 breakcontinue 키워드를 사용합니다.
  3. 변수명 충돌: 반복문에서 사용하는 변수명이 전역 변수나 함수 내부에서 사용하는 변수명과 충돌하는 경우가 있습니다. 이런 경우 변수명을 다르게 지정하거나 변수의 스코프(scope)를 올바르게 설정해야 합니다.
  4. 성능 문제: 반복문에서 처리하는 데이터의 양이 많을 경우 성능 문제가 발생할 수 있습니다. 이 때는 불필요한 반복을 줄이거나, 데이터 처리 방법을 최적화해야 합니다.

Q6.나)
for문에서 break와 continue에 대해서 설명해 주세요

A6.ssam)
breakcontinue는 반복문(for문, while문)에서 사용되는 제어문입니다.

break는 반복문을 중지하고, 바깥쪽 코드 블록으로 이동합니다. break는 주로 특정 조건이 충족되었을 때, 반복문을 종료할 때 사용합니다.

continue는 현재 반복을 중지하고, 다음 반복을 시작합니다. continue는 주로 반복 도중에 특정 조건을 만족하는 경우, 해당 조건을 건너뛰고 다음 반복으로 넘어갈 때 사용합니다.

예시 코드를 보면서 자세히 살펴보겠습니다.

# 1부터 10까지의 수 중에서 짝수만 출력하기
for i in range(1, 11):
if i % 2 == 1:
continue   # 홀수일 경우 건너뛰기
print(i)

위 코드는 continue를 사용하여 1부터 10까지의 수 중에서 홀수를 건너뛰고, 짝수만 출력하는 예시입니다. if문에서 홀수일 경우 continue를 사용하여 다음 반복으로 넘어가도록 하였습니다.

# 1부터 10까지의 수 중에서 5 이상이면 반복문 중지하기
for i in range(1, 11):
if i >= 5:
break   # 5 이상일 경우 반복문 종료
print(i)

위 코드는 break를 사용하여 1부터 10까지의 수 중에서 5 이상인 수가 나오면 반복문을 종료하는 예시입니다. if문에서 5 이상일 경우 break를 사용하여 반복문을 종료하도록 하였습니다.

Q7.나)
내용이 길어지는데 이만 끝낼까요?

Last.ssam)
네, 알겠습니다. 하지만.^^;; 마지막으로 한마디만 더 첨가하자면

지난 포스팅에서는 제어문(if-elif-else)에 대해서 알아보았습니다. 제어문이 일종의 분기점을 만들어 직선으로 뻗어 나갔다면, 이번 for문은 어느 지점에서 뺑글뺑글 돌면서 무언가 에너지를 모은다? 원심분리기처럼 핵심만 뽑아낸다? 는 느낌입니다. 이것은 지극히 저의 개인적인 느낌이므로 참고만 하시고 각자의 이미지를 만들기를 바랍니다.

오늘도 고민거리 한 가지 던져드리겠습니다. 과일 리스트의 짝수번째 과일이름 출력을 예시로 들었는데, 이렇게 생각해 봅시다. 데이터를 1차 가공하여 짝수 번째 있는 과일 이름을 따로 새로운 리스트를 만들어 놓는 게 편하지 않을까? 다시 말해,

Low 데이터를 가공해서 for에 전달할 것인가?
for에서 Low 데이터 1차 가공까지 같이 할 것인가?

정답은 없습니다. 각자의 프로그램의 상황에 맞게 선택하면 됩니다. 어느 것이 더 편한지 말입니다.

댓글