본문 바로가기

Python

04. Python기초 리스트 튜플 딕셔너리

리스트

바로 전 글에서 간단하게 리스트를 설명을 했습니다. (반복문을 설명을 위해서) 여기서는 자세히 리스트를 설명을 하겠습니다.

C/C++ 혹은 자바에는 없는 개념입니다. 비슷한 거로는 배열(Array)이 있는데, 배열 같은 경우 같은 같은 Type의 형태(예를 들어서, 실수인 경우는 실수만 배열에 포함)로만 구성이 되어야 한다. 하지만, 리스트인 경우 다양한 형태의 데이터 형식을 가지고 있을 수 있다.

리스트 생성하는 방법

처음에 대괄호를 이용해서 리스트에 넣을 변수들을 넣고, 여러 개를 넣을 경우, 컴마(,)를 이용하시면 됩니다.

리스트 생성 방법 예시 00

foodlist = [“ramen”, “고기” ]

print(foodlist)

출력 결과

꼭 처음에 리스트를 선언할 때 값을 넣을 필요는 없습니다. 위에 처럼 처음에 선언하면서 변수 값들을 넣을 수도 있고, 빈 리스트를 만들고 추가하는 방식을 할 수도 있다. 2개다 상관없는 방식이라서 무슨 방식을 써도 상관이 없습니다. 저 같은 경우는 빈 리스트를 생성 후에 추가하는 방식을 선호하는데, 아는 분들 중에서는 처음에 리스트 생성할 때 변수를 넣어서 생성하시는 분들도 있습니다. 정말 개인적인 선호에 따라 하시면 될 것 같습니다.

리스트 생성 방법 예시 01

anylist = []

anylist.append(10)

anylist.append(“라면”)

anylist.append(5.0)

print(anylist)

출력 결과

리스트 값에 접근하는 방법

일반적으로 접근하는 방법은 C/C++ 혹은 자바에서 사용되는 배열처럼 접근을 하면 됩니다. 대괄호 안에 접근하고 싶은 index값을 넣어서 접근하시면 됩니다.

리스트 접근 방법 예시

numlist = [1,3,5,7,9]

print("%d" %numlist[0])

print("%d" %numlist[1])

print("%d" %numlist[2])

print("%d" %numlist[3])

print("%d" %numlist[4])

 

출력 결과

C/C++에서 사용되는 배열 같은 경우, 꼭 양수 혹은 0만 사용을 해야 합니다. 하지만, 리스트의 경우에는 음수를 사용해서 접근하는 방법이 존재합니다.

리스트 index에 음수를 넣은 결과 예시 00

출력 결과

위에 결과를 보면 Index값을 음수로 사용이 가능하다는 것을 확인할 수 있습니다. 다른 컴퓨터 언어와 다르게 Index값을 음수를 넣어서 사용을 할 수 있습니다.

다른 방식으로는 콜론 : 이용해서 범위를 지정할 수 있습니다.

예시는 위에 있는 numlist를 이용해 보면

출력 결과

콜론을 쓸 경우 처음부터 혹은 끝부터 포함되는 경우, 숫자를 생략할 수도 있다.

이번도 numlist를 사용해서 보면,

출력 결과

리스트끼리 덧셈, 곱셈을 사용할 수 있다.

리스트끼리 덧셈 혹은 곱셈을 사용할 경우 나오는 예시 00

출력 결과

위에 결과를 보면 알 수 있듯이, 안에 들어간 변수끼리 더하고 곱하는 것이 아니라 추가하는 방식으로 사용됩니다.

+ 의 경우 : 리스트 변수 값들을 서로 더하는 게 아니라, 더한 2 리스트를 연결하는 것입니다.

x의 경우 : 리스트의 변수 값들을 곱하는 것이 아니라, 리스트를 연속으로 반복적으로 연결하는 것입니다.

리스트에 사용되는 함수들

append()와 같은 함수가 존재한다

함수 이름

사용 예시

설명

append()

리스트.append(추가변수)

리스트 뒤에 추가

pop()

리스트.pop()

리스트 뒤에 하나 빼면서 삭제

sort()

리스트.sort()

리스트를 정렬

reverse()

리스트.reverse()

리스트를 역 정렬

index()

리스트.index(값)

지정 값 위치를 알려줌

remove()

리스트.insert(위치, 값)

지정된 위치에 값 입력

extend()

리스트.remove(지울값)

지울 값을 찾아 삭제(많은 경우, 처음 한 개만 삭제)

count()

리스트.count(값)

해당 값 개수를 셈

clear()

리스트.clear()

리스트를 모두 지운다

del()

리스트.del(리스트명[위치])

리스트 해당 위치 항목 삭제

len()

len(리스트)

리스트에 포함된 전체 수 센다

copy()

새로운리스트=리스트.copy()

리스트 내용 복사해서 새로운 리스트에 복사

sorted()

새로은리스트=리스트.resorted()

리스트 정렬해서 새로운 리스트에 입력

 

사용 예시(하다가 귀찮아서 다 안 했는데, 해보시면서 익숙해지면 좋아요)

리스트 함수 사용 예시 00

 

출력 결과

여기서 print(numlist.index(4))인 경우는 존재하지 않기 때문에 오류가 발생한다.

리스트 안에 리스트를 넣을 수가 있습니다. (Nested List)

이것을 이용해서 2차원 리스트를 만들 수 있습니다. 즉 행렬(Matrix)을 만들어서 변수의 값들을 저장할 수 있는 것입니다.

리스트 2차원

list_2D = [[1,2,3],[4,5,6],[7,8,9]]

위에의 예시 경우

list_2D[0][0]

list_2D[0][1]

list_2D[0][2]

list_2D[1][0]

list_2D[1][1]

list_2D[1][2]

list_2D[2][0]

list_2D[2][1]

list_2D[2][2]

 

리스트 2차원 예시

이런 식으로 들어간다.

출력 결과

C/C++ 배열과 다르게 다른 사이즈 리스트가 리스트 안으로 들어갈 수 있습니다.

아래와 같이 불규칙한 사이즈가 들어갈 수도 있다.

불규칙 사이즈 리스트가 리스트 안에 있는 경우 예시

list_2D_2 = [[1,2,3,],[1,2,3,4,5],[1]]

출력 결과

튜플

리스트와 다르게 () 소괄호를 이용해서 생성한다.

튜플은 리스트와 다르게 값을 수정할 수 없고, 읽는 것만 가능하다.

출력 결과

tuple1 값을 바꾸려고 하니 에러가 발생한다. 그래서 tuple 같은 경우는 C/C++에서 define으로 값을 잡고 쓰는 것처럼 사용을 하면 될 것 같습니다.

그래도 값을 바꾸는 것 빼고는 리스트와 비슷하게 쓸 수 있다.

예를 들어서,

출력 결과

딕셔너리

개념 : 2개가 하나로 묶인 자료구조, 하지만 리스트와 다르게 순서가 존재하지 않습니다. 2개를 하나로 묶는 데에 있어서, Key Value가 한 쌍으로 해서 존재합니다.

Key : Key의 경우에는 꼭 한 딕셔너리 안에 Unique이어야 합니다. 즉 값은 값의 Key가 같은 딕셔너리에 존재를 하면 안 됩니다. 그리고 String, 실수, 정수 혹은 Tuple로 정의가 가능합니다.

Value : ValueKey와 다르게 같은 값을 가진 것이 한 딕셔너리에서 존재가 가능합니다. Value 같은 경우는 어떠한 데이터 타입으로도 정의가 가능합니다.

다른 프로그램에서는 Hash, Associative Array라고 하는 것

여기서 딕셔너리는 중괄호 {}를 이용한다.

이때 딕셔너리는 KeyValue 이렇게 2개를 하나로 묶어서 사용한다.

딕셔너리 생성 예시 00

example_dic1 = {1:’라면’,2:’과자’,3:’밥’}

example_dic2 = {’라면’:1,’과자’:2,’밥’:3}

딕셔너리 생성 예시 01

example_dic3 = {}

꼭 키가 앞에 올 필요는 없다. 그리고 빈 딕셔너리를 만들어서 추가를 해도 가능합니다.

여기서 주의할 것은 딕셔너리는 순서가 없기 때문에, 생성된 순서대로 구성되어 있다고 장담을 할 수가 없다.

딕셔너리 사용 예시 00

출력 결과

 

딕셔너리에서 사용되는 함수들

아래의 딕셔너리 변수를 이용해서 확인을 하겠습니다.

example_dic1 = {1:"라면",2:"과자",3:""}

example_dic2 = {"라면":1,"과자":2,"밥":3}

get() 함수 : get괄호 안에 Key 값을 입력을 하면 Value값을 return 하는 함수입니다. 여기서 존재하지 않는 Key값을 입력으로 넣을 시, None이라고 return 합니다.

get() 함수 예시 00

print(example_dic1.get(1))

print(example_dic1.get("과자"))

출력 결과

update() 함수 : 딕셔너리에 Update를 하는데, Key-Value 한쌍을 올리는데, 같은 Key값이 존재하는 경우에는 Overwrite 하고 없는 경우에는 추가하는 함수입니다.

update함수 예시

update = {22 : "떡볶이"}

example_dic1.update(update)

print(example_dic1)

update = {22 : ""}

example_dic1.update(update)

print(example_dic1)

출력 결과

keys(), values(), items() 함수들

keys() : 딕셔너리에 들어있는 Key의 값들을 보여줍니다.

keys() 예시

print(example_dic1.keys())

출력 결과

values() : keys() 함수와 비슷하게, Value의 값들을 보여줍니다.

values() 함수 예시

print(example_dic1.values())

출력 결과

items() : 위에 두 함수 keys(), values()와 같이 딕셔너리에 있는 값들을 보여주는데 key-value를 한 쌍을 tuple로 해서 보여줍니다.

item() 함수 예시

print(example_dic1.items())

출력 결과

딕셔너리에서 삭제를 하는 함수들

pop() : 괄호 안에 key 값을 넣으면 그 key 값을 가진 아이템 (key-value)를 삭제해 줍니다. 삭제를 하면서 print를 하게 되면 무슨 Value값이 삭제가 되는지 확인이 가능합니다.

pop() 함수 예시

print(example_dic1.pop(1))

print(example_dic1)

출력 결과

만약에 딕셔너리 안에 존재하지 않는 key를 입력으로 넣을 경우, 오류가 발생합니다.

오류 발생 시 아래와 같은 오류가 나옵니다.

popitem() : 위에 pop() 함수와 비슷한데, 여기서는 마지막에 저장이 된 아이템 (key-value)를 지웁니다. 그리고 pop()과 마찬가지로 print를 하면 어떤 값이 삭제가 되었는지 tuple형식으로 print가 가능합니다.

popitem() 함수 예시

print(example_dic1.popitem())

print(example_dic1)

출력 결과

clear() : 딕셔너리를 완전히 삭제를 해주는 함수입니다. 안에 값들만 완전히 없애고 빈 딕셔너리로 만들어 줍니다. Print를 이용해서 보면 clear() 함수은 None으로 나오고 그 이후에 clear() 함수를 이용한 딕셔너리를 보면 깡통 딕셔너리가 된 것을 확인할 수 있습니다.

clear() 함수 예시

print(exameple_dic1.clear())

print(exameple_dic1)

출력 결과