Python기초강의강좌, 파이썬기초강의강좌, 열거형 인덱스(index), 집합(set)
#026 파이썬 기초 - 자료구조 3편 (Python Data Structure Part 3)
지난 시간에 이어서 자료구조 학습 계속합니다.
열거형의 인덱스 사용과 집합에 대해서 학습합니다.
열거형
열거형들은 리스트, 튜플, 문자열 같은 것입니다. 그러면 열거형이란 무엇이고 열거형에서는 무엇이 중요할까요?
열거형의 주요한 두 가지 기능은 "멤버십 테스트"( in과 not in 연산)와 열거형의 특정 항목을 얻어올 수 있는 *인덱싱 연산*입니다.
또한 리스트, 튜플, 문자열의 세 가지 열거형은 슬라이스 연산 기능을 가지고 있는데, 이것은 열거형의 일부분을 잘라낸(slice) 것을 반환하는 연산, 즉 부분 집합을 반환해 주는 연산입니다.
예제 ( ds_seq.py로 저장하세요):
앞 시간에 배웠던 리스트 슬라이싱 복습 및 문자열 슬라이싱 예제입니다.
shoplist = ['apple', 'mango', 'carrot', 'banana']
name = 'swaroop'
# Indexing or 'Subscription' operation #
print('Item 0 is', shoplist[0])
print('Item 1 is', shoplist[1])
print('Item 2 is', shoplist[2])
print('Item 3 is', shoplist[3])
print('Item -1 is', shoplist[-1])
print('Item -2 is', shoplist[-2])
print('Character 0 is', name[0])
# Slicing on a list #
print('Item 1 to 3 is', shoplist[1:3])
print('Item 2 to end is', shoplist[2:])
print('Item 1 to -1 is', shoplist[1:-1])
print('Item start to end is', shoplist[:])
# Slicing on a string #
print('characters 1 to 3 is', name[1:3])
print('characters 2 to end is', name[2:])
print('characters 1 to -1 is', name[1:-1])
print('characters start to end is', name[:])
▶ 실행 결과 :
C:\Anaconda\envs\study_39\python.exe E:\python_study\ds_seq.py
Item 0 is apple
Item 1 is mango
Item 2 is carrot
Item 3 is banana
Item -1 is banana
Item -2 is carrot
Character 0 is s
Item 1 to 3 is ['mango', 'carrot']
Item 2 to end is ['carrot', 'banana']
Item 1 to -1 is ['mango', 'carrot']
Item start to end is ['apple', 'mango', 'carrot', 'banana']
characters 1 to 3 is wa
characters 2 to end is aroop
characters 1 to -1 is waroo
characters start to end is swaroop
▶ 동작 원리 :
먼저, 열거형의 각 항목을 얻어오기 위해 어떻게 인덱스를 사용하는지 보겠습니다. 이를 다른 말로 서브스크립션 연산 이라고도 합니다. 위 예제에서 보인 것과 같이 대괄호 내에 특정 숫자를 지정해 주면, 파이썬은 열거형에서 해당 숫자의 위치에 있는 항목을 얻어옵니다. 이때 파이썬은 숫자를 0부터 센다는 점을 기억하시기 바랍니다. 따라서 shoplist [0]과 shoplist [3]은 각각 열거형 shoplist의 첫 번째와 네 번째 항목을 읽어오는 연산을 의미합니다.
인덱스에는 음수가 지정될 수도 있습니다. 이 경우, 열거형의 마지막부터 위치가 계산됩니다. 따라서, shoplist [-1] 은 열거형의 마지막 항목을 의미하며 shoplist [-2]는 열거형의 마지막 항목 바로 뒤의 항목을 의미합니다.
슬라이스 연산은 대괄호 안에 콜론으로 구분한 숫자들을 입력해 주는 것입니다. 슬라이스 연산은 앞서 설명한 인덱싱 연산과 굉장히 비슷합니다. 이 경우 숫자는 반드시 지정해 줄 필요는 없지만 콜론은 반드시 들어가야 합니다.
슬라이스 연산에서 콜론 앞의 첫 번째 숫자는 슬라이스를 시작할 위치를 의미하며 콜론 뒤의 두 번째 숫자는 슬라이스를 멈출 위치를 지정합니다. 만약 첫 번째 숫자가 지정되지 않았을 경우, 파이썬은 열거형의 맨 처음부터 슬라이스를 시작합니다. 두 번째 숫자가 지정되지 않았을 경우, 파이썬은 열거형의 맨 끝에서 슬라이스를 멈춥니다. 이때 슬라이스는 시작 위치부터 슬라이스를 시작_하며 _끝 위치의 직전까지 수행됩니다. 즉, 시작 위치에 해당하는 항목은 슬라이스에 포함되나 마지막 위치에 해당하는 항목은 포함되지 않습니다.
따라서, shoplist [1:3] 은 위치 1에 해당하는 항목부터 시작하여 위치 2에 해당하는 항목을 포함하지만, 위치 3에 해당하는 항목은 포함하지 않습니다. 따라서 두 개의 항목의 슬라이스가 반환됩니다. 이와 비슷하게, shoplist [:]는 전체 열거형의 복사본이 반환됩니다.
슬라이스 숫자로도 음의 위치를 지정해 줄 수 있습니다. 음수는 열거형의 마지막부터 위치를 계산하는 것을 의미합니다. 예를 들어, shoplist [:-1] 은 마지막 항목을 제외한 모든 항목을 포함하고 있는 슬라이스를 반환해 줍니다.
슬라이스 스텝
슬라이스 숫자에 세 번째 인수를 지정해 줄 수 있는데, 이것은 슬라이스 _스텝_에 해당합니다 (기본값은 1입니다):
>>> shoplist = ['apple', 'mango', 'carrot', 'banana']
>>> shoplist[::1]
['apple', 'mango', 'carrot', 'banana']
>>> shoplist[::2]
['apple', 'carrot']
>>> shoplist[::3]
['apple', 'banana']
>>> shoplist[::-1]
['banana', 'carrot', 'mango', 'apple']
보시는 바와 같이 스텝이 2일 경우 위치 0, 2, … 에 해당되는 항목들이 반환되며 스텝이 3일 경우 0, 3, … 에 해당되는 항목들이 반환됩니다.
파이썬 인터프리터에서 여러 가능한 슬라이스 숫자의 조합들을 시험해 보시면 그 결과를 곧바로 확인해 보실 수 있습니다. 이 모든 사항은 모든 열거형에 적용되므로, 튜플, 리스트, 문자열의 경우 모두 동일한 방법을 사용할 수 있습니다!
집합 (Set)
파이썬에서 집합(Set)은 중복되지 않는 요소들의 모임이며, 집합 내의 요소는 순서가 없습니다. 집합은 중괄호({})를 사용하여 생성하며, 요소는 쉼표로 구분합니다. 예를 들어, 다음과 같이 집합을 생성할 수 있습니다.
fruits = {"apple", "banana", "cherry"}
또는 set() 함수를 사용하여 집합을 생성할 수 있습니다.
numbers = set([1, 2, 3, 4, 5])
집합끼리는 멤버십 테스트를 통해 한 집합이 다른 집합의 부분집합인지 확인할 수 있으며, 두 집합의 교집합 등을 알아낼 수도 있습니다.
>>> bri = set(['brazil', 'russia', 'india'])
>>> 'india' in bri
True
>>> 'usa' in bri
False
>>> bric = bri.copy()
>>> bric.add('china')
>>> bric
{'india', 'brazil', 'russia', 'china'}
>>> bric.issuperset(bri)
True
>>> bri.remove('russia')
>>> bri
{'india', 'brazil'}
>>> bri & bric # OR bri.intersection(bric)
{'brazil', 'india'}
▶ 동작 원리 :
여러분들은 아마도 학교에서 기초 집합론에 대해 이미 배우셨을 것이므로 위 예제에 대해서는 딱히 설명할 것이 없습니다.
집합에서 사용할 수 있는 메서드와 연산자입니다.
● set1.add(element): 요소를 추가합니다.
● set1.remove(element): 요소를 제거합니다. 요소가 없으면 예외를 발생시킵니다.
● set1.discard(element): 요소를 제거합니다. 요소가 없어도 예외를 발생시키지 않습니다.
● set1.clear(): 모든 요소를 제거합니다.
● len(set1): 집합의 요소 개수를 반환합니다.
● element in set: 요소가 집합에 있는지 여부를 반환합니다.
● set1.issuperset(set2): set1이 set2의 슈퍼 Set인지 체크. (※ 모두 있어야 슈퍼 인정.)
● set1.union(set2): 두 개의 집합을 합칩니다.
● set1.intersection(set2): 두 개의 집합에서 공통된 요소를 찾습니다.
● set1.difference(set2): set1에만 있는 요소를 찾습니다.
● set1.symmetric_difference(set2): 두 개의 집합에서 공통되지 않은 요소를 찾습니다.
이번 시간에는 열거형 자료구조의 인덱스 활용과 집합(set) 자료구조에 대해서 알아보았습니다.
감사합니다.
Do it! SQL을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다. |
'IT > 파이썬 기초 (Python)' 카테고리의 다른 글
#028 파이썬 기초 - 문제 해결 Part 1 (24) | 2023.03.10 |
---|---|
#027 파이썬 기초 - 자료구조 4편 (Python Data Structure Part 4) (74) | 2023.03.09 |
#025 파이썬 기초 - 자료구조 2편 (Python Data Structure Part 2) (83) | 2023.03.07 |
#024 파이썬 기초 - 자료구조 1편 (Python Data Structure Part 1) (84) | 2023.03.06 |
#023 파이썬 기초 - 모듈 3편 (Python Module Part 3) (77) | 2023.03.05 |
댓글