{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "***\n", "# 11. 튜플과 집합\n", "***\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 1 튜플 활용법\n", "***\n", "- 튜플(Tuples): 순서있는 임의의 객체 모음 (시퀀스형)\n", "- 튜플은 변경 불가능(Immutable)\n", "- 시퀀스형이 가지는 다음 연산 모두 지원\n", " - 인덱싱, 슬라이싱, 연결, 반복, 멤버쉽 테스트" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-1 튜플 연산" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n" ] } ], "source": [ "t1 = () # 비어있는 튜플\n", "t2 = (1,2,3) # 괄호 사용\n", "\n", "t3 = 1,2,3 # 괄호가 없어도 튜플이 됨\n", "print type(t1), type(t2), type(t3)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n" ] } ], "source": [ "r1 = (1,) # 자료가 한 개일 때는 반드시 콤마가 있어야 한다.\n", "r2 = 1, # 괄호는 없어도 콤마는 있어야 한다.\n", "print type(r1)\n", "print type(r2)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 2, 3, 1, 2, 3)\n", "(1, 2, 3, 'PyKUG', 'users')\n", "(1, 2, 3)\n", "\n", "1 (2, 3)\n", "3\n", "True\n" ] } ], "source": [ "t = (1, 2, 3)\n", "print t * 2 # 반복\n", "print t + ('PyKUG', 'users') # 연결\n", "print t\n", "print\n", "\n", "print t[0], t[1:3] # 인덱싱, 슬라이싱\n", "print len(t) # 길이\n", "print 1 in t # 멤버십 테스트" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m100\u001b[0m \u001b[0;31m# 튜플은 변경 불가능, 에러발생\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ], "source": [ "t[0] = 100 # 튜플은 변경 불가능, 에러발생" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))\n", "([1, 2, 3], (1, 2, 4))\n", "({1: 'abc', 2: 'def'}, (1, 2, 3))\n" ] } ], "source": [ "t = (12345, 54321, 'hello!') \n", "u = t, (1, 2, 3, 4, 5) # 튜플 내부 원소로 다른 튜플을 가질 수 있음\n", "print u\n", "\n", "t2 = [1, 2, 3] # 튜플 내부 원소로 리스트 가질 수 있음 \n", "u2 = t2, (1, 2, 4)\n", "print u2\n", "\n", "t3 = {1:\"abc\", 2:\"def\"} # 튜플 내부 원소로 사전 가질 수 있음 \n", "u3 = t3, (1, 2, 3)\n", "print u3" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", "1\n", "2\n", "3\n" ] } ], "source": [ "x, y, z = 1, 2, 3 # 튜플을 이용한 복수 개의 자료 할당\n", "print type(x), type(y), type(z)\n", "print x\n", "print y\n", "print z" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 1\n" ] } ], "source": [ "x = 1\n", "y = 2\n", "x, y = y, x # 튜플을 이용한 두 자료의 값 변경\n", "print x, y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-2 패킹과 언패킹" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 패킹 (Packing): 하나의 튜플 안에 여러 개의 데이터를 넣는 작업" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "t = 1, 2, 'hello'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 언패킹 (Unpacking): 하나의 튜플에서 여러 개의 데이터를 한꺼번에 꺼내와 각각 변수에 할당하는 작업" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "x, y, z = t" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 리스트로도 비슷한 작업이 가능하지만, 단순 패킹/언패킹 작업만을 목적으로 한다면 튜플 사용 추천" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "a = ['foo', 'bar', 4, 5]\n", "[x, y, z, w] = a" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 튜플과 리스트와의 공통점\n", " - 원소로서 임의의 객체를 저장\n", " - 시퀀스 자료형\n", " - 인덱싱, 슬라이싱, 연결, 반복, 멤버쉽 테스트 연산 지원\n", " \n", "- 리스트와 다른 튜플만의 특징\n", " - 변경 불가능 (Immutable)\n", " - 메소드를 가지지 않는다.\n", "\n", "- list() 와 tuple() 내장 함수를 사용하여 리스트와 튜플을 상호 변환할 수 있음" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[100, 2, 3, 4, 5]\n", "(100, 2, 3, 4, 5)\n" ] } ], "source": [ "T = (1,2,3,4,5)\n", "L = list(T)\n", "L[0] = 100\n", "print L\n", "\n", "T = tuple(L)\n", "print T" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-3 튜플의 사용 용도" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 튜플을 사용하는 경우 1: 함수가 하나 이상의 값을 리턴하는 경우" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "def calc(a, b):\n", " return a+b, a*b\n", "\n", "x, y = calc(5, 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 튜플을 사용하는 경우 2: 문자열 포멧팅" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "id : gslee, name : GangSeong\n" ] } ], "source": [ "print 'id : %s, name : %s' % ('gslee', 'GangSeong')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 튜플을 사용하는 경우 3: 고정된 값을 쌍으로 표현하는 경우" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[('two', 2), ('one', 1)]\n" ] } ], "source": [ "d = {'one':1, 'two':2}\n", "print d.items()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 2 집합 자료형\n", "***\n", "- set 내장 함수를 사용한 집합 자료 생성 \n", " - 변경 가능(Mutable)한 객체이다.\n", " - 각 원소간에 순서는 없다.\n", " - 각 원소는 중복될 수 없다.\n", " - [note] 시퀀스 자료형이 아니다." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-1 집합 자료형 생성" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "set([1, 2, 3])\n", "\n", "\n", "set([1, 2, 3])\n", "\n", "\n", "set(['a', 'c', 'b'])\n", "\n", "\n", "set([1, 2, 3])\n" ] } ], "source": [ "a = set([1, 2, 3])\n", "print type(a)\n", "print a\n", "print\n", "\n", "b = set((1, 2, 3))\n", "print type(b)\n", "print b\n", "print\n", "\n", "c = set({'a':1, 'b':2, 'c':3})\n", "print type(c)\n", "print c\n", "print\n", "\n", "d = set({'a':1, 'b':2, 'c':3}.values())\n", "print type(d)\n", "print d" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- set의 원소로는 변경 불가능(Immutable)한 것만 할당 가능하다." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "set([])\n", "set([1, 2, 3, 4, 5])\n", "set([1, 2, 3, 4])\n", "set(['a', 'c', 'b'])\n", "set([(4, 5, 6), (1, 2, 3)])\n" ] }, { "ename": "TypeError", "evalue": "unhashable type: 'list'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'abc'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# 문자열은 각 문자를 집합 원소로 지닌다.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# 각 튜플은 원소로 가질 수 있음\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# 변경 가능 자료인 리스트는 집합의 원소가 될 수 없다.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'list'" ] } ], "source": [ "print set() # 빈 set 객체 생성\n", "print set([1,2,3,4,5]) # 초기 값은 일반적으로 시퀀스 자료형인 리스트를 넣어준다.\n", "print set([1,2,3,2,3,4]) # 중복된 원소는 한 번만 표현\n", "print set('abc') # 문자열은 각 문자를 집합 원소로 지닌다. \n", "print set([(1,2,3),(4,5,6)]) # 각 튜플은 원소로 가질 수 있음 \n", "print set([[1,2,3],[4,5,6]]) # 변경 가능 자료인 리스트는 집합의 원소가 될 수 없다." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- set의 기본 연산\n", "\n", "| set 연산 | 동일 연산자 | 내용 |\n", "|---------------------------|-------------|-----------------------------|\n", "| len(s) | | 원소의 개수 |\n", "| x in s | | x가 집합 s의 원소인가? |\n", "| x not in s | | x가 집합 s의 원소가 아닌가? |" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9\n", "True\n", "True\n" ] } ], "source": [ "A = set([1,2,3,4,5,6,7,8,9])\n", "\n", "print len(A) # 집합의 원소의 수\n", "print 5 in A # 멤버십 테스트\n", "print 10 not in A # 멤버십 테스트" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2-2 집합 자료형 메소드" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- set의 주요 메소드\n", " - 다음 연산은 원래 집합은 변경하지 않고 새로운 집합을 반환한다. \n", "\n", "| set 연산 | 동일 연산자 | 내용 |\n", "|---------------------------|-------------|-----------------------------|\n", "| s.issubset(t) | s <= t | s가 t의 부분집합인가? |\n", "| s.issuperset(t) | s >= t | s가 t의 슈퍼집합인가? |\n", "| s.union(t) | s | t | 새로운 s와 t의 합집합 |\n", "| s.intersection(t) | s & t | 새로운 s와 t의 교집합 |\n", "| s.difference(t) | s - t | 새로운 s와 t의 차집합 |\n", "| s.symmetric_difference(t) | s ^ t | 새로운 s와 t의 배타집합 |\n", "| s.copy() | | 집합 s의 shallow 복사 |" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "True\n", "True\n", "True\n", "\n" ] } ], "source": [ "B = set([4,5,6,10,20,30])\n", "C = set([10,20,30])\n", "\n", "print C.issubset(B) # C가 B의 부분집합?\n", "print C <= B\n", "print B.issuperset(C) # B가 C를 포함하는 집합?\n", "print B >= C\n", "print" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30])\n", "set([1, 2, 3, 4, 5, 6, 7, 8, 9])\n", "\n", "set([4, 5, 6])\n", "set([1, 2, 3, 4, 5, 6, 7, 8, 9])\n", "\n", "set([1, 2, 3, 7, 8, 9])\n", "set([1, 2, 3, 4, 5, 6, 7, 8, 9])\n", "\n", "set([1, 2, 3, 7, 8, 9, 10, 20, 30])\n", "set([1, 2, 3, 4, 5, 6, 7, 8, 9])\n" ] } ], "source": [ "A = set([1,2,3,4,5,6,7,8,9])\n", "B = set([4,5,6,10,20,30])\n", "\n", "print A.union(B) # A와 B의 합집합\n", "print A\n", "print\n", "\n", "print A.intersection(B) # A와 B의 교집합\n", "print A\n", "print\n", "\n", "print A.difference(B) # A - B (차집합)\n", "print A\n", "print\n", "\n", "print A.symmetric_difference(B) # 베타집합. A와 B의 합집합에서 교집합의 원소를 제외한 집합\n", "print A" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30])\n", "set([1, 2, 3, 4, 5, 6, 7, 8, 9])\n", "\n", "set([4, 5, 6])\n", "set([1, 2, 3, 4, 5, 6, 7, 8, 9])\n", "\n", "set([1, 2, 3, 7, 8, 9])\n", "set([1, 2, 3, 4, 5, 6, 7, 8, 9])\n", "\n", "set([1, 2, 3, 7, 8, 9, 10, 20, 30])\n", "set([1, 2, 3, 7, 8, 9, 10, 20, 30])\n", "set([1, 2, 3, 4, 5, 6, 7, 8, 9])\n" ] } ], "source": [ "A = set([1,2,3,4,5,6,7,8,9])\n", "B = set([4,5,6,10,20,30])\n", "\n", "print A | B # A와 B의 합집합\n", "print A\n", "print\n", "\n", "print A & B # A와 B의 교집합\n", "print A\n", "print\n", "\n", "print A - B #A - B (차집합)\n", "print A\n", "print\n", "\n", "print A.symmetric_difference(B) # 베타집합. A와 B의 합집합에서 교집합의 원소를 제외한 집합\n", "print A ^ B\n", "print A" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "set([1, 2, 3, 4, 5, 6, 7, 8, 9])\n", "\n", "True\n", "False\n" ] } ], "source": [ "A = set([1,2,3,4,5,6,7,8,9])\n", "D = A.copy()\n", "print D\n", "print\n", "\n", "print A == D #자료값 비교\n", "print A is D #객체 동등성 비교" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- set은 시퀀스 자료형이 아니므로 인덱싱, 슬라이싱, 정렬 등을 지원하지 않는다. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'set' object does not support indexing", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mA\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m7\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m8\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m9\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'set' object does not support indexing" ] } ], "source": [ "A = set([1,2,3,4,5,6,7,8,9])\n", "print A[0]" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'set' object has no attribute '__getitem__'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'set' object has no attribute '__getitem__'" ] } ], "source": [ "print A[1:4]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "'set' object has no attribute 'sort'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: 'set' object has no attribute 'sort'" ] } ], "source": [ "print A.sort()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 집합을 리스트나 튜플로 변경가능\n", " - 집합에 인덱싱, 슬라이싱, 정렬 등을 적용하기 위해서는 리스트나 튜플로 변경한다." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 2, 3, 4, 5, 6, 7, 8, 9]\n", "(1, 2, 3, 4, 5, 6, 7, 8, 9)\n" ] } ], "source": [ "print list(A)\n", "print tuple(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 하지만 집합에 for ~ in 연산은 적용 가능하다." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 2 3 4 5 6 7 8 9\n" ] } ], "source": [ "A = set([1,2,3,4,5,6,7,8,9])\n", "for ele in A:\n", " print ele," ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- set은 변경 가능(Mutable)한 자료 구조 객체 \n", "- 다음 메소드들은 set을 변경하는 집합 자료 구조 메소드들임\n", "\n", "| set 연산 | 동일 연산자 | 내용 |\n", "|---------------------------|-------------|-----------------------------|\n", "| s.update(t) | s |= t | s와 t의 합집합을 s에 저장 |\n", "| s.intersection_update(t) | s &= t | s와 t의 교집합을 s에 저장 |\n", "| s.difference_update(t) | s -= t | s와 t의 차집합을 s에 저장 |\n", "| s.symmetric_difference_update(t)| s ^= t | s와 t의 배타집합을 s에 저장 |\n", "| s.add(x) | | 원소 x를 집합 s에 추가 |\n", "| s.remove(x) | | 원소 x를 집합 s에서 제거, 원소 x가 집합 s에 없으면 예외 발생 |\n", "| s.discard(x) | | 원소 x를 집합 s에서 제거 |\n", "| s.pop() | | 임의의 원소를 집합 s에서 제거, 집합 s가 공집합이면 예외 발생 |\n", "| s.clear() | | 집합 s의 모든 원소 제거 |" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "set([1, 2, 3, 4, 5, 6])\n", "set([4, 5, 6])\n", "set([4, 5])\n", "set([4, 6, 7])\n", "set([8, 4, 6, 7])\n", "set([4, 6, 7])\n" ] } ], "source": [ "A = set([1,2,3,4])\n", "B = set([3,4,5,6])\n", "\n", "A.update(B) # A에 B 집합의 원소를 추가 시킴\n", "print A\n", "\n", "A.intersection_update([4,5,6,7,8]) # &=\n", "print A\n", "\n", "A.difference_update([6,7,8]) # -=\n", "print A\n", "\n", "A.symmetric_difference_update([5,6,7]) # ^=\n", "print A\n", "\n", "A.add(8) # 원소 추가\n", "print A\n", "\n", "A.remove(8) # 원소 제거\n", "print A" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "ename": "KeyError", "evalue": "10", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mA\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mremove\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m#없는 원소를 제거하면 KeyError 발생\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mKeyError\u001b[0m: 10" ] } ], "source": [ "A.remove(10) # 없는 원소를 제거하면 KeyError 발생" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "set([4, 7])\n", "set([7])\n", "set([])\n" ] } ], "source": [ "A.discard(10) # remove와 같으나 예외가 발생하지 않음\n", "A.discard(6) # 원소 6제거\n", "print A\n", "\n", "A.pop() # 임의의 원소 하나 꺼내기\n", "print A \n", "\n", "A = set([1,2,3,4])\n", "A.clear() # 원소들 없애기\n", "print A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일

" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 1 }