pshoon25 2022. 11. 26. 23:21

제목을 보면 이게 뭔가 싶을것이다.

 

이 글은 리스트(List), 튜플(Tuple), 세트(Set), 딕셔너리(Dictonary)에 관한 설명글이다.

 

그러면 하나씩 무엇인지 알아보자.


리스트(List)란 무엇인가 ?

리스트의 어학적 뜻은 '목록, 명단' 이라는 명사이다.

 

리스트는 여러개의 데이터를 하나로 묶는 데 이용한다.

 

예를들어, '국어, 영어, 수학, 과학' 이라는 강의들을 '과목' 이라는 변수명으로 묶을 수 있다.

과목 = 국어, 영어, 수학, 과학

 

파이썬에서 리스트는 대괄호[ ] 로 구분되며, 괄호안에 내용은 쉼표 , 로 구분된다.

subject = ['korean', 'english', 'math', 'science']
print(subject)
print(type(subject))

#출력값
['korean', 'english', 'math', 'science']
<class 'list'>

 type( ) 을 이용하여 데이터의 타입을 출력하면 'list' 로 조회가 되는 것을 확인할 수 있다.


여기서 알아야 할 것은 인덱스(Index)이다.

인덱스의 뜻은 '색인'이라고 한다. '색인'은 무엇인가.

데이터를 기록할 경우 데이터의 기록 장소 등을 표시하는 것이라고 한다.

 

위 함수에서 'korean'의 인덱스는 subject[0] 이 되는 것이다.

subject[1] = 'math'

마지막 요소는 다르게 변수명[N-1]로도 표현이 가능하다.

subject[3] = 'science' 이며, subject[-1]로도 표현이 가능하다.

subject = ['korean', 'english', 'math', 'science']

print(subject[1])
print(subject[3])
print(subject[-1])

#출력값
english
science
science

추가로 알아야 할 것이 또 있다.

그것은 메서드(Method) 이다.

메소드의 언어적 뜻은 '일정한 계획에 따른 방법, 격식과 정연에 따른 순서' 를 뜻한다.

 

파이썬에서 메서드는 '데이터 타입(자료형)별로 이용할 수 있는 다양한 함수를 제공하는 것'을 뜻한다.

파이썬에서 메서드 사용은 다음과 같다.

자료형.메서드이름( )

 

데이터 타입별로 사용 가능한 메서드가 다르기 때문에 나누어서 보여주겠다.


리스트 메서드(List method)

subject = ['korean', 'english', 'math', 'science']
print(subject)
print(type(subject))

subject.append('japanese')                #리스트 맨 뒤에 항목 추가
print(subject)
#출력값
#['korean', 'english', 'math', 'science', 'japanese']

subject.insert(0, 'japanese')             #리스트 원하는 위치에 항목 추가
print(subject)
#출력값
#['japanese', 'korean', 'english', 'math', 'science', 'japanese']

subject.extend(['japanese', 'social'])    #리스트 맨 뒤에 여러 항목 추가
print(subject)
#출력값
#['japanese', 'korean', 'english', 'math', 'science', 'japanese', 'japanese', 'social']

subject.remove('japanese')                #입력값과 일치하는 리스트 맨 처음 값 삭제
print(subject)
#출력값
#['korean', 'english', 'math', 'science', 'japanese', 'japanese', 'social']

print(subject.pop())                      #리스트 맨 마지막 항목 삭제 후 삭제한 항목 출력
#출력값
#social

print(subject.index('science'))                           #리스트 내 입력값의 인덱스 갑 출력
#출력값
#3

print(subject.count('math'))              #입력값과 일치하는 리스트 내의 개수 출력
#출력값
#1

subject.reverse()                         #리스트 순서를 뒤에서 앞으로 뒤집어 정렬
print(subject)
#출력값
#['japanese', 'japanese', 'science', 'math', 'english', 'korean']

subject.sort()                            #리스트를 오름 차순으로 정렬
print(subject)
#출력값
#['english', 'japanese', 'japanese', 'korean', 'math', 'science']

위 예시를 한 번씩 출력하여 눈으로 확인해보는 것을 추천한다.


튜플(Tuple)은 무엇일까 ?

튜플의 언어적 뜻은 '데이터베이스내의 주어진 목록과 관계있는 속성값의 모음'이다.

 

파이썬에서 튜플은 소괄호( ) 로 구분되며, 괄호안에 내용은 쉼표 , 로 구분된다.

subject = ('korean', 'english', 'math', 'science')
print(subject)
print(type(subject))

#출력값
('korean', 'english', 'math', 'science')
<class 'tuple'>

 

언뜻보면 리스트와 괄호만 차이가 있을 뿐 비슷해 보인다.

 

다만, 특징이 다르다.

튜플은 데이터를 한 번 입력(혹은 생성)하면 그 후에는 항목을 변경할 수가 없다.

# 리스트
subject1 = ['korean', 'english', 'math', 'science']
subject1[1] = 'japanese' 
print(subject1)
print(type(subject1))

# 튜플
subject2 = ('korean', 'english', 'math', 'science')
subject2[1] = 'japanese' 
print(subject2)
print(type(subject2))

#출력값
['korean', 'japanese', 'math', 'science']
<class 'list'>

TypeError: 'tuple' object does not support item assignment

에러 내용을 번역하자면 'TypeError: 'tuple' 개체가 항목 할당을 지원하지 않습니다.' 이다.


튜플에서도 사용 가능한 메서드가 있다.

 

다만, 튜플 내 항목은 처음 등록(및 생성) 후 변경을 할 수 없는 특징 때문에 append(), insert(), remove() 등 항목을 수정하는 메서드는 사용이 불가능 하다.

 

튜플의 메서드는 아래와 같다.

 

튜플 메서드(Tuple method)

subject = ('korean', 'english', 'math', 'science', 'korean')
print(subject)
print(type(subject))

print(subject.count('korean'))      #튜플 내 입력값과 동일한 항목의 갯수
#출력값
#2

print(subject.index('science'))        #튜플 내 입력값과 동일한 항목(맨처음값)의 인덱스 위치
#출력값
#3

세트(Set)는 무엇일까?

세트는 수학의 집합 개념을 파이썬에서 이용할 수 있도록 만든 데이터 타입이다.

 

파이썬에서 세트는 중괄호{ } 로 구분되며, 괄호안에 내용은 쉼표 , 로 구분된다.

subject = {'korean', 'english', 'math', 'science'}
print(subject)
print(type(subject))

#출력값
{'math', 'science', 'english', 'korean'}
<class 'set'>

세트도 리스트, 튜플과 차이가 있다.

 

차이점

1. 데이터의 순서가 없고 데이터를 중복해서 쓸 수 없다.

2. 리스트에서 사용했던 메서트 외에 집합의 기본이 되는 교집합, 합집합, 차집합을 구하는 메소드 사용 불가


세트의 메서드도 알아보자.

 

세트 메서드(Set method)

subject = {'korean', 'english', 'math', 'science', 'korean',}
print(subject)
print(type(subject))

subject.add('japanese')                 #세트에 입력 값을 항목 맨 뒤에 추가
print(subject)
#출력값
#{'math', 'english', 'japanese', 'korean', 'science'}

subject.discard('math')                 #세트에 입력 값과 동일한 항목 삭제
print(subject)
#출력값
#{'english', 'japanese', 'korean', 'science'}

print(subject.pop())                    #세트 맨 앞의 항목 삭제 후 출력
#출력값
#english

subject.remove('science')               #세트에 입력 값과 동일한 항목을 삭제
print(subject)
#출력값
#{'japanese', 'korean'}

subject.update(['social', 'math'])  #세트에 여러 개의 입력 값을 항목 맨 앞에 추가
print(subject)
#출력값
#{'japanese', 'math', 'english', 'social'}

subject.clear()                         #세트 초기화
print(subject)
#출력값
#set()

위 메서드 외 intersection(), union(), difference() 등 집합과 관련된 메서드가 있다.

위 메서드들은 추후에 다시 정리하도록 하겠다.


각 데이터 타입별로 특징이 다르기 때문에, 우리는 한가지 타입으로만 코딩을 작성하기엔 어려움이 있다.

 

이럴 때 데이터 타입간의 변환도 가능하다.

 

리스트(List), 튜플(Tuple), 세트(Set) 간 타입 변환

타입 변환 방법은 간단하다.

subject = ['korean', 'english', 'math', 'science', 'korean',] #데이터 타입 = 리스트
print(type(subject))
#출력값
#<class 'list'>

A = tuple(subject)          # '리스트 > 튜플'로 변환
print(type(A))
#출력값
#<class 'tuple'>

B = set(subject)            # '튜플 > 세트'로 변환
print(type(B))              
#출력값
#<class 'set'>

C = list(A)                 # '튜플 > 리스트'로 변환
print(type(C))          
#출력값
#<class 'list'>

각 타입 별 특징을 잘 활용하여 코딩을 작성하자.


딕셔너리(Dictionary)는 무엇일까?

딕셔너리의 뜻은 '사전'이다.

왜 사전이라는 의미에 단어를 쓰는것일까 ?

이 부분은 딕셔너리의 구성을 보면 알 수 있다.

 

파이썬에서 딕셔너리는 중괄호{ } 로 구분되며, key와 value값은 : 로 구분, 각 쌍은 쉼표 , 로 구분된다.

 

Dict = {key1 : value1, key2 : value2, key3 : value3, key4 : value4}

subject = {'korean':'90점', 'english':'80점', 'math':'100점', 'science':'75점'}
print(subject)
print(type(subject))

#출력값
# {'korean': '90점', 'english': '80점', 'math': '100점', 'science': '75점'}
# <class 'dict'>

 

딕셔너리(Dictionary)의 특징으로는 리스트나 튜플에서 인덱스는 0부터 시작하는 숫자였지만 딕셔너리의 키는 임의로 지정한 숫자나 문자열이 될 수 있으며, 값으로는 어떤 데이터 타입도 사용할 수 있다.

또한, 원하는 value값을 추출 할 때에도 인덱스 값이 아닌 key값을 입력하여 추출하여야 한다.,

subject = {'korean':'90점', 'english':'80점', 'math':'100점', 'science':'75점'}
print(subject['english'])

#출력값
#80점

 

딕셔너리에 데이터 추가, 및 value값 변경은 매우 쉽다.

subject = {'korean':'90점', 'english':'80점', 'math':'100점', 'science':'75점'}
print(subject)

subject['social'] = '65점'			#social : 65점 이라는 데이터 항목 추가
print(subject)

subject['math'] = '95점'				#math의 value값을 100점에서 95점으로 변경
print(subject)

#출력값
# {'korean': '90점', 'english': '80점', 'math': '100점', 'science': '75점'}

# {'korean': '90점', 'english': '80점', 'math': '100점', 'science': '75점', 'social': '65점'}

# {'korean': '90점', 'english': '80점', 'math': '95점', 'science': '75점', 'social': '65점'}

그 다음 딕셔너리의 메서드도 알아보자.

 

Dictionary 메서드(Dictionary method)

subject = {'korean':'90점', 'english':'80점', 'math':'100점', 'science':'75점'}
print(subject)
#출력값
#{'korean': '90점', 'english': '80점', 'math': '100점', 'science': '75점'}

print(subject.get('korean'))                #입력한 key값의 value를 반환. (딕셔너리 내의 없는 key값이면 None값 반환)
#출력값
#90점
print(subject.get('social'))
#출력값
#None

A = {'social' : '75점', 'japanese' : '60점'} #입력한 값(key : value)을 딕셔너리에 추가
subject.update(A)
print(subject)
#출력값
#{'korean': '90점', 'english': '80점', 'math': '100점', 'science': '75점', 'social': '75점', 'japanese': '60점'}

print(subject.keys())                       #딕셔너리의 key 전체를 리스트 형태로 출력
#출력값
#dict_keys(['korean', 'english', 'math', 'science', 'social', 'japanese'])

print(subject.values())                     #딕셔너리의 value 전체를 리스트 형태로 출력
#출력값
#dict_values(['90점', '80점', '100점', '75점', '75점', '60점'])

print(subject.items())                      #딕셔너리의 key : value 항목을 튜플 형태(key, vlaue)로 출력
#출력값
#dict_items([('korean', '90점'), ('english', '80점'), ('math', '100점'), ('science', '75점'), ('social', '75점'), ('japanese', '60점')])

print(subject.pop('math'))                  #입력한 key값의 항목을 삭제후 vlaue값 출력 (딕셔너리 내 없는 key값이면 에러 발생, (key, None)기입하면 에러 > None값 리턴)
#출력값
#100점

print(subject.popitem())                    #딕셔너리의 마지막 항목 제거 후 항목 출력
#출력값
#('japanese', '60점')

print(subject.clear())                      #딕셔너리의 모든 데이터 삭제
#출력값
#None

입력한 메서드 외 copy( ), fromkeys( ), setdefualt( ) 등의 메서드가 있지만 우선 위의 메서드 부터 익히도록 하자.


데이터 타입은 데이터 처리를 할 때 많이 사용할 예정이니 각 타입별 특징과 메서드들을 미리 익혀두도록 하자.