으뜸 파이썬 6장 - 딕셔너리, 튜플, 집합

DH Park·2024년 6월 27일
post-thumbnail

https://book.naver.com/bookdb/book_detail.nhn?bid=16268369

으뜸 파이썬과 함께 공부하는 포스트입니다.


먼저 딕셔너리는 중괄호( {} ) 를 사용하여 만드는데, 이름 : 홍길동 과 같이 키와 요소의 배열로 사용한다.

두번째로 튜플은 소괄호( () ) 이다. 리스트와 비슷하게 사용한다.

딕셔너리로 실습을 해보자.

이렇게 키와 요소를 나열하여 만드는데, 요소의 호출 방법은 리스트와 비슷하다. 튜플의 이름을 적고 대괄호 안에 반환할 요소에 대응하는 키를 입력해주면 된다.

이제 여기서 항목을 삽입해보자.


위의 호출 코드에서 할당 연산자와 할당할 값을 적어주면 된다. append 메소드라던지 다른 작업이 필요없이 쉽게 입력할 수 있다. 또, 항목을 삭제해보자.


보다시피 del이라는 키워드를 사용하여 항목을 삭제할 수 있다. 물론 없는 항목을 삭제하려고 하면 에러가 발생하는 것은 당연한 일이다. 튜플에서도 pop()을 이용하여 항목을 삭제할 수 있다.


del 함수와 형식이 비슷하다. pop 괄호 안에 키를 입력함으로써 삭제가 가능하고, 삭제 한 뒤에는 삭제된 요소를 출력하는 점이 del 함수와 다른 점이다.

하지만 pop() 을 사용한 뒤에도 딕셔너리가 참조하는 값은 변하지 않는다. 반면 삭제한 값을 조회하려 하면 항목이 없으므로 에러를 출력한다.

LAB 6-5 딕셔너리의 활용

1. 과일과 가격을 키와 값의 쌍으로 하는 fruits 라는 딕셔너리를 생성하자. 그리고 모든 키를 리스트로 출력하자.


리스트 안에 fruits 딕셔너리를 입력하면 키만 입력된다.

2. fruits 딕셔너리의 모든 값을 리스트 형식으로 출력하여라.

딕셔너리 안의 값은 values() 메소드로 구할 수 있다. 그러므로 list() 함수를 사용하고, fruits 딕셔너리에 values() 메소드를 사용하여 값을 리스트 내부에 입력하여 출력할 수 있다.


튜플 자료형

튜플은 리스트와 마찬가지로 여러 개의 요소를 가지는 컬렉션 자료형이다. 하지만 리스트와는 달리 한번 정해진 요소의 순서를 바꿀 수 없다. 또한, 튜플 내부의 객체를 변경하거나 삭제하는 것도 불가능하다는 특징을 가지고 있다. 이를 불변 속성이라고 한다.

우리는 이미 함수의 반환문에서 여러 개의 객체를 반환할 수 있다는 것을 배웠다. 이 때 반환되는 자료형이 튜플형이다. 튜플을 생성하는 방법은 여러가지가 있다.

빈 튜플을 만들려면 tuple = (), 하나의 요소를 가진 튜플을 만들려면 tuple = (1,) 이 때, 쉼표를 반드시 사용해야 한다.

기본적인 튜플을 만들려면 tuple = (1,2,3,4), 간단한 방식의 튜플은 tuple = 1,2,3,4, 리스트로부터 튜플을 만들려면 n_list = [1,2,3,4] , tuple = tuple(n_list) 로 만들 수 있다. 튜플도 리스트와 마찬가지로 인덱스를 사용하여 값을 조회할 수 있다.


하지만 이미 만들어져 있는 튜플에는 할당 연산을 할 수 없다.


앞에서 말했듯이 튜플은 불변 자료형이라 내부의 값을 변경할 수 없다.

이제 튜플을 이용한 스왑에 대해 알아보자. 그 전에 C/C++ 등 기존 프로그래밍 언어에서 주로 사용한 임시변수 temp를 이용한 swap에 대해 알아보자.

실행 결과

swap이란 위 코드와 같이 a, b의 값을 교환하는 것이다. 다소 복잡하지만, 파이썬에서는 간단히 할 수 있다.

실행 결과


튜플의 연산

리스트와 마찬가지로 + , * 연산을 사용 가능하다. + 연산은 피연산 튜플의 항목들을 서로 연결하는 기능을 한다.

또, * 연산자는 튜플의 요소를 반복하는 기능이다. 그러나 튜플 + 정수 연산은 에러를 출력한다. 반드시 튜플 + 튜플 연산을 수행해야 한다.

다음은 튜플에서 자주 사용하는 메소드 count()와 index() 이다.

count()는 튜플 내 특정 값의 개수를 가르쳐 주고, index()는 튜플 내의 특정 값의 위치를 알려준다.

앞서 본 것과 같이 튜플은 내부 값을 변경할 수 없다. 이를 해결하려면 튜플을 리스트로 바꿨다가 다시 만드는 방법이 있다.


이 방법으로 튜플의 항목을 변경하는 것이 가능하지만, 튜플의 사용목적은 항목 변경을 위한 것이 아니다. 그러므로 특별한 상황일 때만 사용하도록 하자.


함수 반환문과 튜플 활용

또 다른 튜플의 활용에 대해 알아보자. 앞에서는 대부분 하나의 값을 반환하였다. 이제 여러가지 값을 반환하는 법을 배워보자.

아래 식을 보면 원의 면적과 둘레 값을 각각의 수식을 이용하여 계산한다. 그 후 면적과 둘레 쌍으로 그 결과를 반환하면 튜플 값이 반환되는 것도 알 수 있다.

이 때 패킹, 언패킹을 이용하여 튜플 값에 접근하여 처리할 수 있다. 즉 함수 내부에서는 area, circum 값을 쉼표로 구분하여 패킹하고, 함수 외부에서는 a, c 변수가 두 값을 언패킹 하는 방법으로 값을 전달받는다.


### 집합 자료형

파이썬에는 집합이라는 자료형도 있다. 집합이란 수학에서 명확한 기준 혹은 주어진 성질을 만족시키는 대상들의 모음이다. 각 항목의 순서는 중요하지 않다. 순서가 중요한 튜플과 반대되는 성질이다.

또한 동일한 값을 가지는 항목의 중복이 허용되지 않는다는 특징이 있고, 교집합, 합집합, 차집합, 대칭차집합 등 다양한 집합 연산이 가능하다.

선언할 때는 중괄호를 이용하며, 중괄호 내에 항목을 나열한다. 구분은 쉼표로 한다.

빈 집합 = > set 0 = {}

기본적인 집합 = > set1 = {1,2,3,4}

튜플로부터 집합 만들기 = > n_tuple = (1,2,3,4) set2 = set(n_tuple)

리스트로부터 집합 만들기 = > n_list = [1,2,3,4] set3 = set(n_list)

LAB 6-9 집합의 생성

1. 다음 리스트 lst로부터 set() 함수를 사용하여 집합 s1을 생성하여 출력하시오.

  lst = ['apple', 'mango', 'banana']

  sl  = {'apple', 'mango', 'banana'}

2. 다음 문자열 greet으로부터 set() 함수를 사용하여 집합 s2를 생성하여 출력하시오.

      greet = 'Good afternoon'

      s2 = {'a', 'r', 'G', 'o', 'e', 'n', ' ', 'd', 'f', 't'}


집합의 메소드

이제 원소를 추가하는 add()와 원소를 삭제하는 discard()를 실습해보자.


그리고 교집합은 &, 합집합은 |, 차집합은 -, 대칭 차집합은 ^ 연산자를 사용할 수도 있고 위 표에 나타나있는 메소드를 사용할 수도 있다. 이제 집합에 대해 실습해보자.

이것은 기호를 사용한 집합의 연산이다.

이것은 메소드를 사용한 집합의 연산이다. 값은 기호를 이용한 연산과 똑같이 나오고 편리한 것도 기호를 사용한 연산이다. 기호가 생각이 안날 때나 사용하는 것이 좋을 것 같다.


이런 여러개의 집합에 대한 연속적 연산도 가능하다.
다음은 부분집합과 상위집합의 연산이다. True/False를 반환한다.

두 집합이 공통으로 갖는 원소가 없을 때 이 두 집합을 서로소라 한다. isjoint(s) 메소드는 이 메소드를 호출하는 집합이 s와 서로소인지를 판단한는 메소드이다. 한번 해보자.


LAB 6-10 집합의 연산

1. 다음 두 집합이 있을 경우 이 집합에 대한 연산 결과는?

       s1 = {10, 20, 30, 40}

       s2 = {30, 40, 50, 60, 70}

1) s1 | s2

2) s1 & s2

3) s1 - s2

4) s1 ^ s2

5) s1.issubset(set)

6) s1.issuperset(s2)

7) s1.isdisjoint(s2)

profile
Web Deveolper / Offensive Security Consultant (Prev)

0개의 댓글