리스트, 튜플, 딕셔너리
리스트,튜플,딕셔너리는 파이썬에서 핵심이 되는 자료구조입니다. 앞에서 배운 문자열이나 정수 등은 전부 기본이 되는 데이터형입니다. 이들을 조합하여 복잡한 데이터를 표현 할수 있습니다. 만일 정수와 문자열과 같은 데이터형을 원자에 비유하면 리스트, 튜플, 딕셔너리는 분자와 같다고 생각하면 좋습니다.
리스트
0개 이상의 요소를 갖는 시퀀스(나열)입니다. 요소를 추가 삭제하거나 요소를 다시 쓸 수 있습니다. 요소를 []로 감싸 만듭니다.
튜플
0개이상의 쇼로를 갖는 시퀀스(나열)입니다. 리스트왇 ㅏㄹ리 일단 작성하면 변경할 수 없습니다. 요소를 ()로 감싸 작성합니다.
딕셔너리
예를 들어 영한 사전에서 apple이라는 단어를 조사했다고 합시다. 사과라고 쓰여져 있을 것 입니다. 딕셔너리는 위와 같은 기능을 하는 자료구조입니다. 조사하는 단어를 KEY 찾고자하는 값(VALUE)라고 합니다. {}로 키로 값을 지정해서 만듭니다.
리스트와 튜플은 일반적인 프로그래밍 언어에서 사용하는 [배열]과 매우 비슷합니다.
리스트와 튜플이 결정적으로 다른 점은 리스트는 도중에 값을 변경 할 수 있지만 튜플은 변경할 수 없습니다. 변경할 수 있는 것을 mutable, 변경할 수 없는 것을 immutable이라고 합니다. 자주 나오는 키워드이므로 기억해주세요.
4과목의 점수를 합산하여 결과를 출력하는 코드를 작성해보겠습니다.
math = 78
science = 83
english = 80
chemistry = 75
total = math + science + english + chemistry
average = total / 4
print("average:", average)
JavaScript
복사
이를 리스트로 바꾸어서 사용하면 다음과 같이 사용이 가능하다.
# 리스트
# math = 78
# science = 83
# english = 80
# chemistry = 75
subject = [ 78, 83, 80, 75]
total = subject[0] + subject[1] + subject[2] + subject[3]
average = total / 4
print("average:", average)
JavaScript
복사
튜플이나 리스트는 반복문과 조합해서 사용하면 사용이 많이 편리해진다.
# 튜플
# math = 78
# science = 83
# english = 80
# chemistry = 75
subject = ( 78, 83, 80, 75)
total = subject[0] + subject[1] + subject[2] + subject[3]
average = total / 4
print("average:", average)
# subject[0] = 90 값을 바꾸려고 하면 오류가 뜬다.
JavaScript
복사
장담점을 따지자면 리스틑 튜플의 모든 기능을 가지고 있다. 그리고 값도 변경이 가능하고 분명히 더 유연하다.
그말인 즉슨 내부에서 더많은 연산을 거친다는 거다
내가 메모리를 적게 쓰거나 연산을 더 적게 거쳐야한다면 튜플을 이용하면되고 좀더 메모리를 많이쓰는 대신에 유연성 챙기려면 리스트를 사용하면 된다.
리스트
값을 초기화 하는 방법은 앞서 설명한것과 같습니다.
weekdyas = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
scores = [18, 23, 22, 25, 21]
animals = ['dog', 'cat', 'bird', 'fish', 'hamster']
JavaScript
복사
append 메서드를 이용하면 리스트 맨 끝요소에 값을 추가할수 있다.
scores = [18, 23, 22, 25, 21]
scores.append(24)
JavaScript
복사
insert메서드를 사용하면 지정한 위치에 요소를 추가할수 있다.
animals = ['dog', 'cat', 'bird', 'fish', 'hamster']
animals.insert(2, 'rabbit')
JavaScript
복사
del 명령어를 이용하면 원하는 원소(인덱스)를 삭제할수 있다.
animals = ['dog', 'cat', 'bird', 'fish', 'hamster']
del animals[1]
JavaScript
복사
sort메서드를 이용하면 리스트 안에 있는 값을 오름차순으로 정렬할수 있다.
weekdyas = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
scores = [18, 23, 22, 25, 21]
animals = ['dog', 'cat', 'bird', 'fish', 'hamster']
animals.sort()
scores.sort()
JavaScript
복사
튜플
튜플은 요소를 콤마로 구분하고 ( ) 괄호로 감쌉니다.
weekdyas = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
scores = (18, 23, 22, 25, 21)
animals = ('dog', 'cat', 'bird', 'fish', 'hamster')
JavaScript
복사
튜플은 기본적으로 값을 바꿀수 없도록 설계가 되어있기 때문에 리스트에서 값을 변경하거나 늘리거나 추가하거나 하는 동작의 메소드들이 제공되지 않는다. 간단히 읽기전용이라고 생각하면 된다.
딕셔너리
문자 그대로 사전과 같은 기능을 제공한다. 내부 구조는 [해시 테이블], [키, 값] 주가되어 데이터를 관리한다.
키값은 “”으로 감싸고 , 그 VALUE(값)은 : 뒤에 넣어서 사용하면 된다.
# subject score dictionary
subject_score = { 'math': 90, 'science': 50, 'english': 100, 'history': 0 }
print(subject_score['math'])
print(subject_score['science'])
print(subject_score['english'])
print(subject_score['history'])
subject_score['history'] = 80
JavaScript
복사
리스트의 리스트
지금까지는 숫자나 문자같은 데이터를 자료구조에 넣어서 사용했는데 리스트나 , 튜플 자신을 요소로서 저장할 수 있다. 즉 리스트의 리스트, 튜플의 리스트, 딕셔너리에 리스트…..
방법은 다양하다.
animals = ['cat', 'dog', 'bird', 'fish']
scores = (10, 20, 30, 40)
data = (animals, scores)
print(data)
JavaScript
복사
프로그래머 만드는 자료형에 따라서 마음대로 자유롭게 사용이 가능하다.
animals = ['cat', 'dog', 'bird', 'fish']
scores = (10, 20, 30, 40)
data = (animals, scores)
data[0][1] = 'puppy'
# 첫번쨰 animals 리스트에 값을 추가
data[0].append('elephant')
JavaScript
복사
C++ 2차원 배열과 같은 느낌으로 리스트안에 리스트를 넣어서 사용이 가능하다.
>>> a = [[10, 20], [30, 40], [50, 60]]
>>> a[0] [0] # 세로 인덱스 0, 가로 인덱스 0인 요소 출력
10
>>> a[1][1] # 세로 인덱스 1, 가로 인덱스 1인 요소 출력
40
>>> a[2][1] # 세로 인덱스 2, 가로 인덱스 0인 요소 출력
60
>>> a[0][1] = 1000 # 세로 인덱스 0, 가로 인덱스 1인 요소에 값 할당
>>> a[0][1]
1000
JavaScript
복사
리스트나 튜플을 다루는데 사용하면 편리한 함수
len
리스트나 튜플에 포함되는 요소 수를 반환합니다.
//1차원 일때
animals = ['cat', 'dog', 'bird', 'fish']
length = len(animals)
print('The length of the list is:', length)
//2차원
animals = [ ['cat', 'dog'], ['bird', 'fish'] ]
length = len(animals[0])
print('The length of the list is:', length)
JavaScript
복사
copy
어떤 변수에 리트와 튜플을 저장했다고 합시다. 그 변수를 다른 변수에 대입해도 그 리스트 자체가 복사되는것은 아닙니다.
animals1 = [ ['cat', 'dog'], ['bird', 'fish'] ]
animals2 = animals
animals2[0][1] = 'puppy'
JavaScript
복사
animals2 에는 animal1 의 원본이 넘어가서 animal2를 바꾸면 animal1의값도 같이 바뀌게 된다.
만약에 내가 원본이아닌 값만을 복사해서 대입시켜주고 싶다면 copy 명령어를 활용해야 한다.
animals1 = [ ['cat', 'dog'], ['bird', 'fish'] ]
animals2 = animals1.copy()
animals2[0][1] = 'puppy'
JavaScript
복사
in
어떠한 값의 리스트나 튜플에 포함되었는지 확인 할때는 in 연산자를 사용하면 편리하다.
animals = [ 'cat', 'dog', 'bird', 'fish' ]
check = "bird" in animals
print(check)
JavaScript
복사
알고 싶은 값 in 리스트나 튜플
이와 같이 호출해주면 된다. 값이 포함돼 있으면 TRUE, 그렇지 않으면 FALSE를 반환한다.
sort/sorted
리스트를 정렬하기 위한 두가지 방법이 준비되어 있다. sorted함수와 sort함수이다. 수치의 경우는 오름차순, 문자의 경우는 알파벳순으로 정렬된다.
animals = [ 'cat', 'dog', 'bird', 'fish' ]
sorted_animals = sorted(animals)
print(sorted_animals)
JavaScript
복사
animals = [ 'cat', 'dog', 'bird', 'fish' ]
animals.sort()
print(animals)
JavaScript
복사
숫자의 오름차순이나 알파벳 순이아닌 자신만의 규칙으로 정렬하고 싶을때가 있다. 그런 경우에는 “어떤 규칙으로 정렬할지” 지정하는 함수를 사용하는 방법이 있다. 추후에 설명하도록 하겠다.
print()는 인수로 주어진 정보를 출력 영역인 콘솔에 표시하는 함수이다. 단일값을 출력하고 싶으면 괄호안에 해당값을 넣어주기만 하면되고 여러 값을 출력하고 싶으면 ,(콤마) 구분해주면 된다.
animals = [ 'cat', 'dog', 'bird', 'fish' , 'hi']
print(animals[0], animals[1], animals[2], animals[3], animals[4])
JavaScript
복사
% 연사자를 활용 할 수도 있다.
본래 문자열 내에 %s 나 %d 등의 서식을 삽입해 둔다. 이부분을 실제로 데이터로 바꿔 넣는 방법이다. 문자열 뒤에 %를 배치하고 그 뒤에 튜플 형식으로 실제 데이터를 배치하면 된다.
%s : 문자열
%d : 10진수
%x : 16진수
%f : 실수(소수)
주석
프로그램을 작성하면 주석을 남기고 싶을 때가 있다. 그러나 하다보면 길어 질때도 있다.
#부터 행 끝까지가 주석으로 간주된다.
#animals = [ 'cat', 'dog', 'bird', 'fish' , 'hi']
#print("first animal is: " + animals[0])
JavaScript
복사
여러행에 걸친 문자열을 주석 처리하고 싶다면 [”””],[”””]와 같이 인용문자 3개를 연속해서 사용하면된다.
animals = [ 'cat', 'dog', 'bird', 'fish' , 'hi']
print("first animal is: " + animals[0])
"""
print("first animal is: " + animals[0])
print("first animal is: " + animals[0])
print("first animal is: " + animals[0])
"""
Python
복사
행의 줄바꿈
코드를 작성하다보면 한줄이 엄청 길어질때가 있다. 길이는 어느정도 적당한 길이로 맞춰주는게 좋다.
animals = \
[
'사자'
, '호랑이'
, '코끼리'
, '기린'
, '원숭이'
, '물고기'
, '판다'
, '뱀'
, '악어'
, '하마'
]
print (animals)
Python
복사