Python

[혼공파]3주차_ 반복문

hongchaewon 2024. 2. 1. 14:25

*본 블로그는 노트북 화면에 최적화되어 있습니다.

   

     안녕하세요! 한빛미디어 혼공학습단 11기로 활동하게 된 홍채원입니다.

     이번 혼공은 윤인성 저자의 「혼자 공부하는 파이썬 - 개정판」과 함께 달려봅니다:)

     3주차에서는 다음과 같은 내용을 다루어 보았습니다.

 

          4. 반복문

             1) 리스트와 반복문

            2) 딕셔너리와 반복문

            3) 범위 자료형과 while 반복문

            4) 문자열, 리스트, 딕셔너리와 관련된 기본 함수

 

     3주차가 되니 파이썬이랑 익숙해진 것도 같고, 조금은 해이해져서(...) 미루다가 적게 되네요^^;;

     혼공학습단 페이지의 1, 2주차 활동에 적힌 코멘트를 읽으며 반성과 함께 초심을 되찾고자 다짐한 3주차였던 것 같습니다.

     여전히 부족한 블로그일테지만, 좋게 봐주시면 감사하겠습니다 😊

     그럼 지금부터 시작합니다!

 

 

 


 

 

 

04-1. 리스트와 반복문

 

   4단원은 리스트에 대해 배워보는 것으로 시작합니다. 이때까지 숫자, 문자, 수식 등의 개별적인 자료를 다뤘다면 그들을 모아서 사용할 수 있게 해주는 특별한 형태의 자료를 리스트라고 합니다. 리스트는 대괄호 내부에 여러 종류의 자료를 넣어 선언합니다. 리스트 안에 있는 요소를 각각 사용하려면 리스트 이름 바로 뒤에 대괄호를 입력하고 자료의 위치를 나타내는 숫자를 입력합니다. 쉼표로 구분되어 각각의 요소가 저장되는데, 이때 파이썬은 0부터 센다는 사실을 기억하셔야 합니다. 

>>> list_a = [2023, 29, 51, "우승", True, False]
>>> list_a[0]
2023
>>> list_a[3]
우승
>>> list_a[1:3]
[29, 51]

 

   이렇게요. list_a[1:3] 은 첫 번째 글자부터 세 번째 글자를 선택하는 것이 아니라 그 앞의 두 번째 글자까지 출력하는 것을 헷갈리지 않아야겠습니다. 

 

   리스트의 다양한 사용법에 대해서 알아보겠습니다. 

 ① 리스트의 특정 요소를 변경할 수 있습니다. 

>>> list_a = [2023, 29, 51, "우승", True, False]
>>> list_a[3] = "챔피언"
>>> list_a
[2023, 29, 51, "챔피언", True, False]

 

② 대괄호 안에 음수를 넣어 뒤에서부터 요소를 선택할 수 있습니다. 

>>> list_a = [2023, 29, 51, "우승", True, False]
>>> list_a[-1] = False
False
>>> list_a[-5]
29

 

   뒤에서부터 셀 때는 0부터가 아니라 -1부터입니다. 

 

③ 리스트 접근 연산자를 다음과 같이 이중으로 사용할 수 있습니다. 

>>> list_a = [2023, 29, 51, "우승", True, False]
>>> list_a[3] = "우승"
'우승'
>>> list_a[3][0]
'우'

 

④ 리스트 안에 리스트를 사용할 수 있습니다. 

>>> list_a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> list_a[1]
[4, 5, 6]
>>> list_a[1][1]
5

 

 

 

   문자열에서 사용하는 연결(+), 반복(*) 연산자는 리스트에서도 활용할 수 있습니다. len() 함수는 괄호 내부에 문자열을 넣으면 문자열의 글자 수를 세어 주지만 리스트 변수를 넣으면 요소의 개수를 세어줍니다. 리스트에 요소를 추가할 때는 append() 함수, insert(a,b) 함수를 사용하여 리스트 뒤에 요소를 추가하거나 리스트 중간(a 위치)에 요소(b)를 추가할 수 있습니다. 리스트 연결 연산자와 같이 원본에 어떠한 영향도 주지 않은 것을 비파괴적, append / insert / extend 와 같은 함수 또는 연산은 파괴적이라고 표현할 수 있습니다. 

   인덱스를 제거할 수도 있습니다. 제거하는 것은 리스트 원본에 영향을 주기에 파괴적이라고 볼 수 있겠네요.

del 리스트명[인덱스] 또는 리스트명.pop(인덱스) 의 형식을 사용할 수 있습니다. 3:6 과 같이 지정하면 3번째 부터 5번째 까지의 요소를, :3을 지정하면 2번째 까지의, 3:을 지정하면 3번째를 포함한 오른쪽을 제거한다고 보면 됩니다. 리스트 내부의 요소를 모두 제거할 때는 clear() 함수를 사용합니다. 

   많이 사용하는 연산자 중 하나인 in 연산자not in 연산자도 있습니다. 리스트 내부에 값이 있으면 True, 없으면 False를 출력하고 not in 연산자는 그 반대로 작동합니다. 이 연산자들을 통해서는 특정 값이 리스트 내부에 있는지 확인하는 방법을 제공합니다. 

 

 

   저는 프로그래밍 언어의 꽃은 for문이라고 생각하는데요, (개발 비전공자로써 왠지 본격적인 프로그래밍의 문을 여는 느낌이 들어서요..^^;;) 대학교에서 C언어를 공부하다가 for문에서부터 머리에 힘을 빡 주어야만 이해를 할 수 있었던 기억이 있습니다... ㅠㅠ for 반복문의 기본 형태는 다음과 같습니다. 

for 반복자 in 반복할 수 있는 것:
    코드

 

반복문이 두번 사용된 2차원 리스트를 통해 for문을 이해해보고자 하였습니다. 

list_of_list = [
    [1, 2, 3],
    [4, 5, 6, 7],
    [8, 9]
]

for items in list_of_list:
    for item in items:
        print(items)

 

그러나 출력 결과가 잘 이해되지 않아 챗gpt를 사용하였습니다. 다음과 같은 설명을 얻을 수 있었습니다.  

  1. list_of_list는 리스트 안에 리스트를 포함한 2차원 리스트입니다.
  2. 바깥쪽 for 루프에서 items는 list_of_list의 각 하위 리스트를 순회합니다.
  3. 안쪽 for 루프에서 item은 각 하위 리스트의 원소를 하나씩 순회합니다.
  4. print(items)는 현재 순회 중인 하위 리스트를 출력합니다.

[1, 2, 3]의 원소의 개수는 3개이기 때문에 [1, 2, 3] 리스트를 세번 반복하였고 [4, 5, 6, 7]은 원소가 4개였기 때문에 리스트를 4번, [8,9]는 2개이기 때문에 2번 반복한 것이라고 저만의 말로 쉽게 정리해보았습니다. 

 

 

 

 

 

 

04-2. 딕셔너리와 반복문

 

   리스트가 인덱스를 기반으로 값을 저장하는 것이하면 딕셔너리는 키를 기반으로 값을 저장하는 것입니다.

자료형 의미 가리키는 위치 선언 형식
리스트 인덱스를 기반으로 값을 저장 인덱스 변수 = [ ]
딕셔너리 키를 기반으로 값을 저장 변수 = { }

 

#딕셔너리를 선언합니다.
dictionary = {
    "name": "7D 건조 망고",
    "type": "당절임",
    "ingridient": ["망고", "설탕", "메타중아황산나트륨", "치자황색소"]
    "origin": "필리핀"
}

#출력합니다.
print("name:", dictionary["name"])
print("type:", dictionary["type"])
print("ingridient:", dictionary["ingridient"])
print("origin:", dictionary["origin"])

#값을 변경합니다.
dictionary["name"] = "8D 건조 망고"
print("name:", dictionary["name"])

 

 

 

 

 

 

04-3. 범위 자료형과 while 반복문

 

   특정한 횟수만큼 반복해서 돌리고 싶을 때 for 반복문과 범위를 함께 조합하여 사용합니다. 정수로 이루어진 범위를 만들 때 range() 함수를 사용합니다. 

 

① 매개변수에 숫자를 한 개 넣는 방법 : 0부터 A-1 까지의 정수로 범위를 만듭니다.

② 매개변수에 숫자를 두 개 넣는 방법 : A부터 B-1까지의 정수로 범위를 만듭니다.

③ 매개변수에 숫자를 세 개 넣는 방법 : A부터 B-1까지의 정수로 범위를 만들고, 앞뒤의 숫자가 C의 차이를 가집니다.

 

표기는 A 또는 B라고 하더라도 실제는 A-1 또는 B-1만큼의 값만 출력하기 때문에 예를 들어 0부터 10까지의 점위를 생성하는데 10을 반드시 표현해야 한다는 것을 강조하고 싶을 떄는 다음과 같이 작성할 수 있습니다. 

>>> a = range(0, 10 + 1)
>>> list(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

이번엔 for 반복문을 범위와 함께 사용해보겠습니다. 다음과 같은 형태를 띱니다. 

for 숫자 변수 in 범위:
    코드

 

첫 번째 반복문은 [0, 1, 2, 3, 4]로, 두 번째 반복문은 [5, 6, 7, 8, 9]로, 세 번째 반복문은 [0, 3, 6, 9]로 반복문이 일어나는 코드를 작성해 보겠습니다. 

for i in range(5):
    print(str(i) + "= 반복변수")
print()

for i in range(5, 10):
    print(str(i) + "= 반복변수")
print()

for i in range(0, 10, 3):
    print(str(i) + "= 반복변수")
print()

 

 

이번엔 for 반복문을 통해 리스트와 범위를 조합해보겠습니다. 

#리스트를 선언합니다.
array = [273, 32, 103, 57, 52]

#리스트에 반복문을 적용합니다. 
for i in range(len(array)):
    #출력합니다. 
    print("{}번째 반복: {}".format(i, array[i]))

 

 

이번엔 while 반복문에 대해 알아보겠습니다. while 반복문의 기본적인 사용 방법을 알아보는 고전적인 예제를 통해 살표보도록 하겠습니다. 

# 반복 변수를 기반으로 반복하기
i = 0
while i < 10;
    print("{}번째 반복문입니다.".format(i))
    i += 1

 

위에서 설명드린 for 반복문의 상황 이외에는 while 반복문을 사용합니다. 대표적으로 무한반복이 있습니다. for반복문으로는 무한반복을 구현할 수 없습니다. 그리고 while 반복문에서 가장 중요한 키워드는 조건입니다. 조건을 활용해서 반복을 사용해야 한다면 while 반복문을 사용하는 것이 효과적입니다. 

 

상태를 기반으로 반복하는 while 반복문시간을 기반으로 반복하는 while 반복문을 알아보겠습니다. 

list_test = [1, 2, 1, 2]
value = 2

while value in list_test:
      list_test.remove(value)
      
print(list_test)

리스트 내부에 있는 모든 2가 제거될 때까지 반복되기 때문에 2가 모두 제거된 결과 [1, 1]이 출력됩니다. 

 

시간을 기반으로 반복하는 예는 유닉스타임이라는 개념을 숙지해야 합니다. 유닉스타임이란 세계 표준시로, 1970년 1월 1일 0시 0분 0초를 기준으로 몇 초가 지났는지 정수로 나타낸 것을 의미합니다. 

import time

number = 0

target_tick = time.time() + 5
while time.time() < target_tick:
      number += 1
      
print("5초동안 {}번 반복했습니다.".format(number))

이 코드를 실행한다면 5초동안 14223697번 반복했습니다. 와 같은 실행 결과를 출력할 것입니다. 

 

이외에도 반복문을 벗어날 때 사용하는 break 키워드와 반복문의 현재 반복을 생략할 때 사용하는 구문인 continue 키워드가 존재합니다.

 

 

 

 

 

 

04-4. 문자열, 리스트, 딕셔너리와 관련된 기본 함수

 

   파이썬에서만 사용할 수 있는 다양한 함수들에 대한 소개로 시작해보겠습니다. 

 

- 리스트에 적용할 수 있는 기본 함수: min(), max(), sum()

- 리스트 뒤집기: reversed()

- 현재 인덱스가 몇 번째인지 확인하기: enumerate()

- 딕셔너리로 쉽게 반복문 작성하기: items()

- 리스트 안에 for문 사용하기: 리스트 내포

 

함수 설명
min() 리스트 내부에서 최솟값을 찾습니다.
max() 리스트 내부에서 최댓값을 찾습니다.
sum() 리스트 내부에서 값을 모두 더합니다.

 

이 챕터는 위에 소개한 새로운 함수들이 예제에서 어떻게 사용되는지를 학습하는 것이 핵심인 듯합니다. 

 

 

 

 

 

 


 

3주차 미션과 함께 마무리하도록 하겠습니다. 윤인성 저자의 「혼자 공부하는 파이썬 - 개정판」 p.213 1번 문항 풀이입니다.

 

list_a = [0, 1, 2, 3, 4, 5, 6, 7] 일 경우에 ........

함수 list_a 의 값
list_a.extend(list_a) [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7]
list_a.append(10) [0, 1, 2, 3, 4, 5, 6, 7, 10]
list_a.insert(3,0) [0, 1, 2, 0, 3, 4, 5, 6, 7]
list_a.remove(3) [0, 1, 2, 4, 5, 6, 7]
list_a.pop(3) [0, 1, 2, 4, 5, 6, 7]
list_a.clear() [ ]

 

'Python' 카테고리의 다른 글

[혼공파]2주차_자료형과 조건문  (2) 2024.01.13
[혼공파]1주차_파이썬이란?, 자료형  (2) 2024.01.04