본문 바로가기
IT/파이썬 기초 (Python)

#026 파이썬 기초 - 자료구조 3편 (Python Data Structure Part 3)

by DoitSQL 2023. 3. 8.
728x90

Python기초강의강좌, 파이썬기초강의강좌, 열거형 인덱스(index), 집합(set)

#026 파이썬 기초 - 자료구조 3편 (Python Data Structure Part 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을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다.

 

728x90

댓글