대괄호: 프로그래밍 초보자를 위한 친절한 안내 mymaster, 2024년 06월 14일 대괄호([])… 프로그래밍을 처음 접하는 여러분에게는 조금 생소하고 어려운 기호처럼 느껴질 수 있습니다. 하지만 걱정하지 마세요! 이 글을 끝까지 읽으시면 대괄호가 무엇이고, 어떤 역할을 하며, 어떻게 사용하는지 정확하게 이해할 수 있을 것입니다. 마치 친절한 가이드와 함께 여행하듯, 대괄호의 세계를 하나씩 탐험해 보도록 하겠습니다. 1. “리스트”라는 이름의 방: 데이터를 차곡차곡 담아보자 1.1. 대괄호, 프로그래밍의 만능 저장소를 소개합니다! 대괄호([])는 프로그래밍에서 리스트(List)라고 불리는 자료 구조를 나타낼 때 사용됩니다. 마치 여러 개의 방이 있는 집처럼, 리스트는 여러 개의 데이터를 순서대로 저장할 수 있는 공간입니다. 각각의 방에는 번호가 매겨져 있어 원하는 데이터를 쉽게 찾을 수 있다는 장점이 있습니다. 예를 들어, 우리반 친구들의 이름을 저장하고 싶다고 가정해 봅시다. 이때, 대괄호를 사용하여 친구들의 이름을 아래와 같이 리스트 형태로 만들 수 있습니다. ["철수", "영희", "민수", "수진"] 위 예시에서 대괄호 안에 있는 “철수”, “영희”, “민수”, “수진”은 각각 하나의 데이터를 의미하며, 이들은 모두 문자열(String) 형태로 저장되어 있습니다. 각 데이터는 쉼표(,)로 구분되어 있으며, 대괄호로 감싸져 하나의 리스트로 묶여 있습니다. 1.2. 다양한 데이터 타입을 담을 수 있는 유연함 리스트의 가장 큰 장점 중 하나는 다양한 종류의 데이터를 저장할 수 있다는 것입니다. 문자열뿐만 아니라 숫자, 불리언(True/False) 값, 심지어 다른 리스트까지도 담을 수 있습니다. 예를 들어, 아래와 같이 숫자와 문자열이 섞여 있는 리스트를 만들 수도 있습니다. [1, "둘", 3, "넷"] 또한, 리스트 안에 또 다른 리스트를 넣어 계층적인 구조를 만들 수도 있습니다. [["사과", "빨강"], ["바나나", "노랑"], ["포도", "보라"]] 위 예시는 과일 이름과 색깔을 짝지어 저장한 리스트입니다. 각각의 과일과 색깔은 다시 대괄호로 묶여 하나의 리스트를 이루고 있으며, 이렇게 만들어진 세 개의 리스트가 다시 하나의 큰 리스트 안에 담겨 있습니다. 이처럼 리스트 안에 리스트를 넣는 방식을 통해 데이터를 구조적으로 관리할 수 있습니다. 1.3. 리스트 활용의 첫걸음: 데이터에 접근하기 리스트에 저장된 데이터를 사용하려면, 각 데이터가 저장된 위치를 알아야 합니다. 프로그래밍에서는 리스트의 첫 번째 데이터의 위치를 0부터 시작하여 순서대로 번호를 매깁니다. 이 번호를 인덱스(Index) 라고 합니다. 예를 들어, ["철수", "영희", "민수", "수진"] 라는 리스트에서 “철수”는 0번 인덱스, “영희”는 1번 인덱스에 위치하게 됩니다. 특정 인덱스에 위치한 데이터를 가져오려면, 리스트 이름 뒤에 대괄호를 쓰고 그 안에 원하는 인덱스 번호를 넣어주면 됩니다. >>> 친구 = ["철수", "영희", "민수", "수진"] >>> print(친구[0]) "철수" >>> print(친구[2]) "민수" 위 예시에서 친구[0]은 친구 리스트의 0번 인덱스에 해당하는 “철수”를 의미하며, 친구[2]는 2번 인덱스에 위치한 “민수”를 가리킵니다. 1.4. 리스트, 프로그래밍의 시작과 끝을 함께하는 필수 개념 지금까지 리스트의 기본적인 개념과 데이터에 접근하는 방법을 간단히 살펴보았습니다. 하지만 리스트는 이 외에도 데이터를 추가, 삭제, 변경하는 등 다양한 기능을 제공합니다. 다음 장에서는 리스트를 더욱 효율적으로 활용하는 방법에 대해 자세히 알아보도록 하겠습니다. 리스트는 프로그래밍의 거의 모든 곳에서 사용되는 중요한 개념이니, 확실하게 이해하고 넘어가는 것이 좋습니다. 2. 리스트 마스터하기: 데이터 조작의 기술 2.1. 새로운 친구 추가하기: 리스트에 데이터 추가하는 방법 리스트는 고정된 크로 데이터를 저장하는 것이 아니라, 필요에 따라 데이터를 추가하거나 삭제할 수 있습니다. 새로운 데이터를 리스트에 추가할 때는 append() 메서드를 사용합니다. append() 메서드는 리스트의 맨 마지막에 새로운 데이터를 추가합니다. 예를 들어, 과일 = ["사과", "바나나"] 라는 리스트가 있을 때, 과일.append("딸기")라고 입력하면 “딸기”가 리스트의 맨 뒤에 추가되어 ["사과", "바나나", "딸기"] 가 됩니다. >>> 과일 = ["사과", "바나나"] >>> 과일.append("딸기") >>> print(과일) ["사과", "바나나", "딸기"] 2.2. 특정 위치에 데이터 넣기: insert() 메서드 활용법 append() 메서드는 리스트의 맨 뒤에 데이터를 추가하지만, 원하는 위치에 데이터를 삽입하고 싶다면 insert() 메서드를 사용해야 합니다. insert() 메서드는 첫 번째 인자로 삽입할 위치를 나타내는 인덱스를 받고, 두 번째 인자로 삽입할 데이터를 받습니다. 예를 들어, 숫자 = [1, 3, 4] 라는 리스트에 숫자 2를 1번 인덱스 위치에 삽입하고 싶다면 숫자.insert(1, 2) 와 같이 입력하면 됩니다. 이렇게 하면 2가 1번 인덱스에 추가되어 [1, 2, 3, 4] 가 됩니다. >>> 숫자 = [1, 3, 4] >>> 숫자.insert(1, 2) >>> print(숫자) [1, 2, 3, 4] 2.3. 원하는 데이터 삭제하기: remove() 메서드 활용법 리스트에서 특정 데이터를 삭제하고 싶을 때는 remove() 메서드를 사용합니다. remove() 메서드는 삭제할 데이터 자체를 인자로 받습니다. 예를 들어, 색깔 = ["빨강", "파랑", "노랑"] 라는 리스트에서 “파랑”을 삭제하고 싶다면 색깔.remove("파랑") 와 같이 입력하면 됩니다. >>> 색깔 = ["빨강", "파랑", "노랑"] >>> 색깔.remove("파랑") >>> print(색깔) ["빨강", "노랑"] 만약 삭제할 데이터가 여러 개 존재하는 경우, remove() 메서드는 해당 데이터 중 가장 앞에 있는 하나만 삭제합니다. 2.4. 데이터 변경하기: 인덱스를 이용한 직접 수정 리스트의 특정 위치에 있는 데이터를 변경하려면, 해당 데이터의 인덱스를 사용하여 직접 값을 할당하면 됩니다. 예를 들어, 동물 = ["강아지", "고양이", "토끼"] 라는 리스트에서 “고양이”를 “햄스터”로 변경하려면 동물[1] = "햄스터" 와 같이 입력하면 됩니다. >>> 동물 = ["강아지", "고양이", "토끼"] >>> 동물[1] = "햄스터" >>> print(동물) ["강아지", "햄스터", "토끼"] 2.5. 리스트 길이 확인하기: len() 함수 활용 리스트에 저장된 데이터의 개수를 확인하려면 len() 함수를 사용합니다. 예를 들어, 과일 = ["사과", "바나나", "딸기"] 라는 리스트의 길이를 확인하려면 len(과일) 와 같이 입력하면 3이라는 값이 출력됩니다. >>> 과일 = ["사과", "바나나", "딸기"] >>> print(len(과일)) 3 2.6. 리스트, 데이터 관리를 위한 강력한 도구 지금까지 리스트에 데이터를 추가하고, 삭제하고, 변경하는 등 다양한 데이터 조작 방법을 살펴보았습니다. 이러한 기능들을 활용하면 리스트를 더욱 효율적으로 활용하여 데이터를 관리할 수 있습니다. 프로그래밍을 하다 보면 리스트를 사용해야 하는 경우가 매우 많으므로, 이번 장에서 소개된 메서드들을 능숙하게 다룰 수 있도록 연습하는 것이 좋습니다. 3. 반복문과 함께 사용하는 리스트: 데이터 활용의 지평을 넓히다 3.1. 리스트와 반복문: 최고의 궁합 자랑하는 프로그래밍 콤비 리스트는 그 자체로도 유용하지만, 반복문과 함께 사용하면 더욱 강력한 기능을 발휘합니다. 반복문은 특정 코드 블록을 여러 번 반복해서 실행할 수 있도록 해주는 구문입니다. 리스트의 각 요소에 대해 동일한 작업을 반복적으로 수행해야 할 때, 반복문을 사용하면 코드를 간결하고 효율적으로 작성할 수 있습니다. 3.2. for 반복문으로 리스트 요소 출력하기 리스트의 모든 요소를 하나씩 출력하고 싶을 때 for 반복문을 사용할 수 있습니다. 예를 들어, 숫자 = [1, 2, 3, 4, 5] 라는 리스트가 있을 때, 아래와 같이 for 반복문을 사용하여 각 요소를 출력할 수 있습니다. 숫자 = [1, 2, 3, 4, 5] for 숫자 in 숫자들: print(숫자) 이 코드는 다음과 같이 동작합니다. for 숫자 in 숫자들:: 숫자들 리스트의 각 요소를 하나씩 꺼내서 숫자 변수에 할당합니다. print(숫자): 숫자 변수에 저장된 값을 출력합니다. 위 과정을 숫자들 리스트의 모든 요소에 대해 반복합니다. 따라서 위 코드를 실행하면 다음과 같은 결과가 출력됩니다. 1 2 3 4 5 3.3. for 반복문 활용하여 리스트 요소 제곱 값 계산하기 for 반복문을 사용하여 리스트의 각 요소에 대해 다양한 연산을 수행할 수 있습니다. 예를 들어, 아래 코드는 숫자 = [1, 2, 3, 4, 5] 리스트의 각 요소를 제곱한 값을 출력합니다. 숫자 = [1, 2, 3, 4, 5] for 숫자 in 숫자들: 제곱 = 숫자 * 숫자 print(제곱) 이 코드는 다음과 같이 동작합니다. for 숫자 in 숫자들:: 숫자들 리스트의 각 요소를 하나씩 꺼내서 숫자 변수에 할당합니다. 제곱 = 숫자 * 숫자: 숫자 변수에 저장된 값을 제곱하여 제곱 변수에 할당합니다. print(제곱): 제곱 변수에 저장된 값을 출력합니다. 위 과정을 숫자들 리스트의 모든 요소에 대해 반복합니다. 따라서 위 코드를 실행하면 다음과 같은 결과가 출력됩니다. 1 4 9 16 25 3.4. range() 함수와 함께 사용하는 for 반복문: 특정 범위 다루기 range() 함수를 사용하면 특정 범위의 숫자 시퀀스를 생성할 수 있습니다. range() 함수를 for 반복문과 함께 사용하면, 지정된 횟수만큼 반복문을 실행할 수 있습니다. 예를 들어, 아래 코드는 1부터 10까지의 숫자를 출력합니다. for i in range(1, 11): print(i) 이 코드는 다음과 같이 동작합니다. for i in range(1, 11):: range(1, 11)는 1부터 10까지의 숫자 시퀀스를 생성합니다. 각 숫자는 i 변수에 차례대로 할당됩니다. print(i): i 변수에 저장된 값을 출력합니다. 위 과정을 range(1, 11)에서 생성된 모든 숫자에 대해 반복합니다. 따라서 위 코드를 실행하면 다음과 같은 결과가 출력됩니다. 1 2 3 4 5 6 7 8 9 10 3.5. 반복문과 리스트: 무한한 가능성을 현실로 만드는 조합 지금까지 리스트와 반복문을 함께 사용하는 방법을 간단히 살펴보았습니다. 반복문을 사용하면 리스트의 모든 요소에 대해 동일한 작업을 효율적으로 수행할 수 있습니다. 이 외에도 리스트와 반복문을 함께 사용하는 다양한 방법들이 있으며, 이를 통해 복잡한 데이터 처리 작업을 간편하게 처리할 수 있습니다. 4. 다양한 기능을 갖춘 리스트 메서드: 활용도를 높여주는 마법 4.1. 리스트 정렬하기: sort() 메서드 활용법 리스트의 요소를 특정 순서대로 정렬해야 할 때 sort() 메서드를 사용할 수 있습니다. sort() 메서드는 리스트의 요소를 오름차순으로 정렬합니다. 예를 들어, 숫자 = [3, 1, 4, 2, 5] 라는 리스트를 오름차순으로 정렬하려면 숫자.sort() 와 같이 입력하면 됩니다. 숫자 = [3, 1, 4, 2, 5] 숫자.sort() print(숫자) # 출력: [1, 2, 3, 4, 5] 4.2. 내림차순 정렬하기: reverse=True 활용 리스트를 내림차순으로 정렬하려면 sort() 메서드의 reverse 매개변수를 True 로 설정하면 됩니다. 숫자 = [3, 1, 4, 2, 5] 숫자.sort(reverse=True) print(숫자) # 출력: [5, 4, 3, 2, 1] 4.3. 리스트 뒤집기: reverse() 메서드 활용법 리스트의 요소 순서를 완전히 뒤집으려면 reverse() 메서드를 사용할 수 있습니다. 문자 = ['a', 'b', 'c', 'd'] 문자.reverse() print(문자) # 출력: ['d', 'c', 'b', 'a'] 4.4. 특정 값의 위치 찾기: index() 메서드 활용법 리스트에서 특정 값의 인덱스를 찾으려면 index() 메서드를 사용할 수 있습니다. index() 메서드는 찾고자 하는 값을 인자로 받고, 해당 값이 처음 나타나는 위치의 인덱스를 반환합니다. 과일 = ["사과", "바나나", "딸기"] print(과일.index("바나나")) # 출력: 1 만약 index() 메서드에 리스트에 없는 값을 전달하면 ValueError 가 발생합니다. 4.5. 특정 값의 개수 세기: count() 메서드 활용법 리스트에서 특정 값이 몇 개 존재하는지 세려면 count() 메서드를 사용할 수 있습니다. count() 메서드는 찾고자 하는 값을 인자로 받고, 해당 값이 리스트에 몇 개 존재하는지 반환합니다. 숫자 = [1, 2, 2, 3, 2, 4, 2] print(숫자.count(2)) # 출력: 4 4.6. 다양한 리스트 메서드 활용하여 데이터 분석하기 지금까지 다양한 리스트 메서드들을 살펴보았습니다. 이러한 메서드들을 활용하면 리스트를 더욱 효율적으로 다룰 수 있으며, 데이터 분석 작업을 수행할 때 유용하게 사용할 수 있습니다. 각 메서드의 기능과 사용법을 익혀 다양한 상황에서 적용해 보세요. 5. 대괄호, 문자열 다루기에도 활용된다: 문자열과 리스트의 조화 5.1. 문자열: 문자들의 리스트 프로그래밍에서 문자열은 문자들의 순서 있는 집합으로, 리스트와 유사한 방식으로 다룰 수 있습니다. 대괄호([])를 사용하여 문자열 내의 특정 문자 또는 문자열 부분에 접근할 수 있습니다. 5.2. 인덱스로 문자 추출하기: 문자열도 리스트처럼 문자열의 각 문자는 숫자 인덱스를 가지며, 0부터 시작합니다. 대괄호 안에 원하는 문자의 인덱스를 넣어 해당 문자를 추출할 수 있습니다. 예를 들어, “Hello”라는 문자열에서 첫 번째 문자 ‘H’를 얻으려면 문자열[0] 와 같이 사용합니다. 문자열 = "Hello" print(문자열[0]) # 출력: H 5.3. 슬라이싱: 문자열 자르기 대괄호를 사용하여 문자열의 일부분을 추출하는 것을 슬라이싱이라고 합니다. 슬라이싱은 [시작 인덱스:끝 인덱스] 형태로 사용하며, 시작 인덱스부터 끝 인덱스 – 1까지의 문자열을 추출합니다. 예를 들어, “Hello”라는 문자열에서 “ello”를 추출하려면 문자열[1:5] 와 같이 사용합니다. 문자열 = "Hello" print(문자열[1:5]) # 출력: ello 5.4. 문자열 길이: len() 함수 활용 문자열의 길이를 확인할 때도 리스트와 마찬가지로 len() 함수를 사용합니다. 문자열 = "Hello" print(len(문자열)) # 출력: 5 5.5. 문자열과 리스트: 함께 사용하는 다양한 기법 문자열과 리스트는 서로 변환하여 사용할 수 있으며, 다양한 문자열 처리 작업에 유용하게 활용될 수 있습니다. 예를 들어, 문자열을 공백을 기준으로 분리하여 리스트로 변환하려면 split() 메서드를 사용합니다. 문자열 = "This is a sentence" 단어_리스트 = 문자열.split() print(단어_리스트) # 출력: ['This', 'is', 'a', 'sentence'] 반대로, 리스트의 요소들을 특정 문자열로 연결하여 하나의 문자열로 만들려면 join() 메서드를 사용합니다. 단어_리스트 = ['This', 'is', 'a', 'sentence'] 문자열 = ' '.join(단어_리스트) print(문자열) # 출력: This is a sentence 5.6. 문자열과 리스트: 프로그래밍의 필수 요소 지금까지 대괄호를 사용하여 문자열의 특정 문자에 접근하고, 문자열을 슬라이싱하고, 문자열과 리스트를 변환하는 방법을 살펴보았습니다. 이러한 기능들을 능숙하게 활용하면 다양한 문자열 처리 작업을 효율적으로 수행할 수 있습니다. 6. 대괄호, 더 깊이 알아보기: 심화 학습 6.1. 리스트와 메모리: 데이터 저장 방식 이해하기 리스트는 여러 데이터를 연속적으로 저장하는 자료 구조가 아닙니다. 실제로는 각 요소에 대한 참조를 저장하며, 이 참조는 실제 데이터가 저장된 메모리 위치를 가리킵니다. 따라서 리스트의 크기는 유동적이며, 요소를 추가하거나 삭제할 때마다 메모리 할당 및 해제가 발생합니다. 6.2. 얕은 복사와 깊은 복사: 리스트 복사 시 주의 사항 리스트를 다른 변수에 할당할 때 주의해야 할 점은 단순히 참조만 복사된다는 것입니다. 즉, 원본 리스트와 복사본 리스트는 동일한 메모리 위치를 참조하게 되며, 한 리스트를 변경하면 다른 리스트에도 영향을 미치게 됩니다. 이를 얕은 복사라고 합니다. 리스트1 = [1, 2, 3] 리스트2 = 리스트1 리스트2[0] = 10 print(리스트1) # 출력: [10, 2, 3] print(리스트2) # 출력: [10, 2, 3] 만약 완전히 독립적인 복사본을 만들고 싶다면 copy() 메서드를 사용하여 깊은 복사를 수행해야 합니다. 리스트1 = [1, 2, 3] 리스트2 = 리스트1.copy() 리스트2[0] = 10 print(리스트1) # 출력: [1, 2, 3] print(리스트2) # 출력: [10, 2, 3] 6.3. 리스트 컴프리헨션: 간결하고 효율적인 리스트 생성 기법 리스트 컴프리헨션은 기존 리스트를 기반으로 새로운 리스트를 만드는 간결하고 효율적인 방법입니다. 예를 들어, 1부터 10까지의 숫자를 제곱한 값을 가진 리스트를 만들려면 다음과 같이 리스트 컴프리헨션을 사용할 수 있습니다. 제곱_리스트 = [x**2 for x in range(1, 11)] print(제곱_리스트) # 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 리스트 컴프리헨션을 사용하면 반복문과 조건문을 사용하는 것보다 코드를 더 간결하게 작성할 수 있습니다. 6.4. 다차원 리스트: 리스트 안의 리스트 리스트 안에 또 다른 리스트를 포함시키는 다차원 리스트를 사용할 수 있으며, 행렬이나 테이블과 같은 데이터 구조를 표현하는 데 유용합니다. 행렬 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 행렬의 각 요소에 접근 print(행렬[0][0]) # 출력: 1 print(행렬[1][2]) # 출력: 6 6.5. 대괄호, 프로그래밍 세계의 다재다능한 도구 대괄호는 리스트와 문자열을 다루는 데 필수적인 요소이며, 프로그래밍에서 매우 다양하게 활용됩니다. 리스트와 문자열을 효과적으로 다루는 것은 효율적인 코드를 작성하는 데 중요하며, 다양한 문제 해결에 도움이 될 수 있습니다. 목차 Toggle 1. “리스트”라는 이름의 방: 데이터를 차곡차곡 담아보자1.1. 대괄호, 프로그래밍의 만능 저장소를 소개합니다!1.2. 다양한 데이터 타입을 담을 수 있는 유연함1.3. 리스트 활용의 첫걸음: 데이터에 접근하기1.4. 리스트, 프로그래밍의 시작과 끝을 함께하는 필수 개념2. 리스트 마스터하기: 데이터 조작의 기술2.1. 새로운 친구 추가하기: 리스트에 데이터 추가하는 방법2.2. 특정 위치에 데이터 넣기: insert() 메서드 활용법2.3. 원하는 데이터 삭제하기: remove() 메서드 활용법2.4. 데이터 변경하기: 인덱스를 이용한 직접 수정2.5. 리스트 길이 확인하기: len() 함수 활용2.6. 리스트, 데이터 관리를 위한 강력한 도구3. 반복문과 함께 사용하는 리스트: 데이터 활용의 지평을 넓히다3.1. 리스트와 반복문: 최고의 궁합 자랑하는 프로그래밍 콤비3.2. for 반복문으로 리스트 요소 출력하기3.3. for 반복문 활용하여 리스트 요소 제곱 값 계산하기3.4. range() 함수와 함께 사용하는 for 반복문: 특정 범위 다루기3.5. 반복문과 리스트: 무한한 가능성을 현실로 만드는 조합4. 다양한 기능을 갖춘 리스트 메서드: 활용도를 높여주는 마법4.1. 리스트 정렬하기: sort() 메서드 활용법4.2. 내림차순 정렬하기: reverse=True 활용4.3. 리스트 뒤집기: reverse() 메서드 활용법4.4. 특정 값의 위치 찾기: index() 메서드 활용법4.5. 특정 값의 개수 세기: count() 메서드 활용법4.6. 다양한 리스트 메서드 활용하여 데이터 분석하기5. 대괄호, 문자열 다루기에도 활용된다: 문자열과 리스트의 조화5.1. 문자열: 문자들의 리스트5.2. 인덱스로 문자 추출하기: 문자열도 리스트처럼5.3. 슬라이싱: 문자열 자르기5.4. 문자열 길이: len() 함수 활용5.5. 문자열과 리스트: 함께 사용하는 다양한 기법5.6. 문자열과 리스트: 프로그래밍의 필수 요소6. 대괄호, 더 깊이 알아보기: 심화 학습6.1. 리스트와 메모리: 데이터 저장 방식 이해하기6.2. 얕은 복사와 깊은 복사: 리스트 복사 시 주의 사항6.3. 리스트 컴프리헨션: 간결하고 효율적인 리스트 생성 기법6.4. 다차원 리스트: 리스트 안의 리스트6.5. 대괄호, 프로그래밍 세계의 다재다능한 도구 post