파이썬 기초 5 - 튜플과 딕셔너리

매생이·2021년 10월 24일
0

파이썬 공부

목록 보기
7/8

튜플(Tuple)

튜플을 이야기할때 가장 중요한 포인트는 바로 변경 불가 이다.
리스트처럼 하나의 튜플에 여러 값이 들어갈 수 있지만, 한번 튜플속에 저장된 값은 변경이 불가능하다.
변경될 수 없다는 점 때문에 키 값으로 자주 사용된다.

선언할 때 () 를 사용해서 선언하고, 리스트처럼 , 를 사용해서 구분한다.
모든 기본적인 자료형 데이터를 함께 저장할 수 있다.

튜플도 리스트처럼 아이템에 자동으로 인덱스가 부여된다.
인덱스를 사용해서 튜플에 담긴 아이템을 조회할 수 있다.

tmp = ("a","f","b","k","c")

for i in range(5):
    print(i,tmp[i])

실행 결과 :
0 a
1 f
2 b
3 k
4 c

튜플의 참조

튜플도 다른 컨테이너 자료형처럼 len()함수를 사용해서 아이템이 몇개가 존재하는지를 구해,
반복문의 반복 횟수로 지정해 아이템 조회가 가능하다.

tmp = ("소고기","돼지고기","닭고기","양고기")

for i in range(len(tmp)):
    if "돼지" in tmp[i]:
        print(i+1,"번째 아이템",tmp[i],"yes")

실행 결과 :
2 번째 아이템 돼지고기 yes

튜플의 결합

튜플도 튜플간의 결합으로 더 큰 튜플로 만들 수 있는데, 문자열처럼 + 연산자를 사용해서 결합할 수 있다.

tmp = ("소고기","돼지고기","닭고기","양고기")

tmp2 = (1,2,3,4,5)

tmp3 = tmp + tmp2

print(tmp3)

실행 결과 :
('소고기', '돼지고기', '닭고기', '양고기', 1, 2, 3, 4, 5)

튜플의 조회

튜플도 리스트처럼 인덱스를 사용한 슬라이싱이 가능하다.
당연히 다른 컨테이너 자료형처럼 [n:m] 으로 사용하면 n부터 m-1번째 까지 참조가 된다.

tmp = ("소고기","돼지고기","닭고기","양고기")

print(tmp[0:3])

실행 결과 :
('소고기', '돼지고기', '닭고기')

튜플은 리스트와 다르게 tuple[2] = "aaa" 이런식으로 참조하면서 변경이 불가능하다.
값이 한번 선언하면 불변성을 가지기 때문에 추가, 삭제, 변경이 불가하다.

또한 튜플은 리스트와 다르게 정렬이 불가능하다.
수정이 불가능 하기 때문에 순서도 변경이 불가능하기 때문.
변경하고 싶다면 리스트로 자료형을 변환시킨 후 리스트인 상태로 정렬한 후, 다시 튜플로 자료형을 바꿔줘야 한다.

sorted()함수를 사용하면 튜플값을 인자로 넣어줘도 아이템들을 정렬시킬 수 있는데,
대신 반환 값이 리스트로 반환된다.
반환 값을 다시 튜플로 변환하면 된다.

딕셔너리(dictionary, dict)

딕셔너리는 다른 컨테이너형 자료형과 다르게, key와 value로 자료가 저장된다.
인덱스가 아닌 key를 사용하여 value를 조회할 수 있다.

{} 를 사용해서 선언할 수 있고, 각 아이템들을 key , value 의 형태로 저장할 수 있다.

tmp = {
    "beef":"소고기",
    "fork":"돼지고기",
    "chicken":"닭고기",
    "mutton":"양고기"
    }

print(tmp["beef"])

실행 결과 :
소고기

딕셔너리 추가

딕셔너리의 추가는 딕셔너리이름["key"] = value 형식으로 가능하다.

tmp = {
    "beef":"소고기",
    "fork":"돼지고기",
    "chicken":"닭고기",
    "mutton":"양고기"
    }

print(tmp)

tmp["bean"]="콩"
print(tmp)

실행 결과 :
{'beef': '소고기', 'fork': '돼지고기', 'chicken': '닭고기', 'mutton': '양고기'}
{'beef': '소고기', 'fork': '돼지고기', 'chicken': '닭고기', 'mutton': '양고기', 'bean': '콩'}

수정도 같은 방법으로 가능하다.

사실상 linux의 touch명령어와 같이 생각하면 된다.
없는 key값을 조회해서 = 연산자로 값을 할당하면 새로운 아이템이 저장되고,
있는 key값을 조회하면 값이 수정된다.

tmp = {
    "beef":"소고기",
    "fork":"돼지고기",
    "chicken":"닭고기",
    "mutton":"양고기"
    }

print(tmp)

tmp["bean"]="콩"
print(tmp)

tmp["bean"]="콩고기"
print(tmp)

실행 결과 :
{'beef': '소고기', 'fork': '돼지고기', 'chicken': '닭고기', 'mutton': '양고기'}
{'beef': '소고기', 'fork': '돼지고기', 'chicken': '닭고기', 'mutton': '양고기', 'bean': '콩'}
{'beef': '소고기', 'fork': '돼지고기', 'chicken': '닭고기', 'mutton': '양고기', 'bean': '콩고기'}

딕셔너리의 keys 와 values

딕셔너리의 모든 키값과 모든 밸류들을 조회할 수 있다.

tmp = {
    "beef":"소고기",
    "fork":"돼지고기",
    "chicken":"닭고기",
    "mutton":"양고기"
    }

print(tmp.keys())
print(tmp.values())

실행 결과 :
dict_keys(['beef', 'fork', 'chicken', 'mutton'])
dict_values(['소고기', '돼지고기', '닭고기', '양고기'])

tmp = {
    "beef":"소고기",
    "fork":"돼지고기",
    "chicken":"닭고기",
    "mutton":"양고기"
    }
key_list = list(tmp.keys())
print(key_list[3])

실행 결과 :
mutton

이러한 방식으로 키값들을 리스트로 저장해 반복문을 사용하여 밸류를 조회하는데 사용할 수도 있다.

딕셔너리 삭제

딕셔너리에서 특정 아이템을 제거하려면 del 을 사용하여 삭제할 수 있다

tmp = {
    "beef":"소고기",
    "fork":"돼지고기",
    "chicken":"닭고기",
    "mutton":"양고기"
    }

del tmp["chicken"]
print(tmp)

실행 결과 :
{'beef': '소고기', 'fork': '돼지고기', 'mutton': '양고기'}

del 이 아닌 clear() 함수를 사용하여 모든 아이템을 삭제해버릴 수 있다.

tmp = {
    "beef":"소고기",
    "fork":"돼지고기",
    "chicken":"닭고기",
    "mutton":"양고기"
    }


print(tmp)

tmp.clear()

print(tmp)
실행 결과 : 
{'beef': '소고기', 'fork': '돼지고기', 'chicken': '닭고기', 'mutton': '양고기'}
{}
>

## in, not in
다른 언어들과 다르게 파이썬이 좀 더 유연하다? 직관적이다 라고 생각되는 점중 하나는 `in`, 그리고 `not in` 이다.

>

tmp = {
"beef":"소고기",
"fork":"돼지고기",
"chicken":"닭고기",
"mutton":"양고기"
}

if "chicken" in tmp:
print("yes")

실행 결과 : 
yes

컨테이너형 자료형 안에 내가 찾고싶은 아이템이 존재하는지를 아주 간단하게 확인할 수 있는 방법이다.
컨테이너안에 존재하는지는 in, 없는지는 not in으로 확인할 수 있다.

그리고 in, not in 은 문자열에도 사용이 가능하다.

예를 들어, 여러개의 문자열을 가지고 있는 배열속에서, "돼지" 이라는 단어가 포함된 문자열이 존재하는지를 확인할 수 있다.

대신 딕셔너리형은 key값으로 있는지 없는지 확인할 수 있다.

tmp = ["소고기","돼지고기","닭고기","양고기"]

for text in tmp:
    if "돼지" in text:
        print(text," yes")

실행 결과 :
돼지고기 yes

0개의 댓글