2017년 하계 경성 프로그래밍 교육 (4/5) 경성대학교 공과대학 소프트웨어 학과.

Slides:



Advertisements
Similar presentations
파이썬 (Python). 1 일 : 파이썬 프로그래밍 기초 2 일 : 객체, 문자열 3 일 : 문자인코딩, 정규표현식, 옛한글 4 일 : 파일 입출력 5 일 : 함수와 모듈 6 일 : 원시 말뭉치 다루기 실습 7 일 : 주석 말뭉치 다루기 실습 8 일 : 웹 데이터로.
Advertisements

Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
이진 나무 구조 강윤섭 2008년 5월 23일.
4장 배열과 함수 한빛미디어(주).
DB 프로그래밍 학기.
DB 프로그래밍 학기.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
Power Java 제3장 이클립스 사용하기.
7장 배열 ②.
2017년 하계 경성 프로그래밍 교육 (5/5) 경성대학교 공과대학 소프트웨어 학과.
Lesson 5. 레퍼런스 데이터형.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
10장 함수.
5장. 참조 타입.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
프로그래밍 랩 – 7주 리스트.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
공학컴퓨터프로그래밍 Python 염익준 교수.
11장. 1차원 배열.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
13. 연산자 오버로딩.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
인터넷응용프로그래밍 JavaScript(Intro).
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
10장 tkinter로 GUI 만들기.
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
Lesson 2. 기본 데이터형.
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
CHAP 21. 전화, SMS, 주소록.
2nd day Indexing and Slicing
데이터 동적 할당 Collection class.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
에어 PHP 입문.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
7주차: Functions and Arrays
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
Chapter 10 데이터 검색1.
세션에 대해 알아보고 HttpSession 에 대해 이해한다 세션 관리에 사용되는 요소들을 살펴본다
함수, 모듈.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
구조체(struct)와 공용체(union)
Numerical Analysis Programming using NRs
8장 선택 논리 II 1. 논리연산자 1.1 논리연산자 : AND (&&) 1.2 논리연산자 : OR (||)
제 4 장 Record.
프로그래밍 개론 Ⅰ-실습 2장 데이터와 식①.
Spring, 2019 School of CSE Pusan National University
김선균 컴퓨터 프로그래밍 기초 - 12th : 문자열 - 김선균
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
오늘의 강의 제목을 입력하세요 소 속 : 인문대학 국어국문학과 이 름 : 홍길동 교수 1.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

2017년 하계 경성 프로그래밍 교육 (4/5) 경성대학교 공과대학 소프트웨어 학과

리스트(list) https://docs.python.org/3/

리스트 생성하기 list 클래스의 생성자를 이용하여 리스트를 생성 간결한 문법을 사용하여 다음과 같이 리스트를 생성할 수 있다. list1 = list() # 빈 리스트를 생성한다. list2 = list([2, 3, 4]) # 원소 2, 3, 4를 가진 리스트를 생성한다. list3 = list(["red", "green", "blue"]) # 문자열을 가진 리스트를 생성한다. list4 = list(range(3, 6)) # 원소 3, 4, 5를 가진 리스트를 생성한다. list5 = list("abcd") # 문자 a, b, c, d를 가진 리스트를 생성한다. list1 = [] # list() 와 동일하다. list2 = [2, 3, 4] # list([2, 3, 4])와 동일하다. list3 = ["red", "green"] # list(["red", "green"])와 동일하다.

리스트 위한 함수 >>> list1 = [2, 3, 4, 1, 32] Python Shell >>> list1 = [2, 3, 4, 1, 32] >>> len(list1) 5 >>> max(list1) 32 >>> min(list1) 1 >>> sum(list1) 42 >>> import random >>> random.shuffle(list1) # list1 내의 원소들을 뒤섞는다. >>> list1 [4, 1, 2, 32, 3]

인덱스 연산자 [] myList = [5.6, 4.5, 3.3, 13.2, 4.0, 34.33, 34.0, 45.45, 99.993, 11123] myList 참조 myList[0] myList[1] myList[2] myList[3] myList[4] myList[5] myList[6] myList[7] myList[8] myList[9] 5.6 4.5 3.3 13.2 4.0 34.33 34.0 45.45 99.993 11123 리스트 참조 변수 인덱스 5인 리스트 원소

+, *, in/not 연산자 >>> list1 = [2, 3] Python Shell >>> list1 = [2, 3] >>> list2 = [1, 9] >>> list3 = list1 + list2 >>> list3 [2, 3, 1, 9] >>> list3 = 2 * list1 [2, 3, 2, 3, 2, 3] >>> list4 = list3[2 : 4] >>> list4 [2, 3] Python Shell >>> list1 = [2, 3, 5, 2, 33, 21] >>> list1[-1] 21 >>> list1[-3] 2 Python Shell >>> list1 = [2, 3, 5, 2, 33, 21] >>> 2 in list1 True >>> 2.5 in list1 False

리스트 컴프리헨션 리스트 컴프리헨션(list comprehension)은 리스트의 순차 원소를 생성할 수 있는 간편한 방법을 제공한다. 꺽쇠괄호 안에 표현식을 먼저 작성하고 그 다음에 for 절을 넣고, 그 이후로 for나 if 절을 넣거나 생략하는 형태로 리스트 컴프리헨션을 구성할 수 있다. 리스트 컴프리헨션은 표현식의 결과에 따라 리스트를 만든다. Python Shell >>> list1 = [x for x range(0, 5)] # 0, 1, 2, 4의 리스트를 반환한다. >>> list1 [0, 1, 2, 3, 4] >>> list2 = [0.5 * x for x in list1] >>> list2 [0.0, 0.5, 1.0, 1.5, 2.0] >>> list3 = [x for x in list2 if x < 1.5] >>> list3 [0.0, 0.5, 1.0]

리스트 비교하기 >>>list1 = ["green", "red", "blue"] Python Shell >>>list1 = ["green", "red", "blue"] >>>list2 = ["red", "blue", "green"] >>>list2 == list1 False >>>list2 != list1 True >>>list2 >= list1 >>>list2 > list1 >>>list2 < list1 >>>list2 <= list1

문자열을 리스트로 분할하기 items = "Welcome to the Korea".split() print(items) items = "34#13#78#45".split("#") ['34', '13', '78', '45']

사례 연구: 문자 빈도수 세기 100개의 소문자를 랜덤하게 생성하고 이들 문자를 chars라 하는 문자 리스트에 할당한다. … Chars[0] Chars[1] Chars[98] Chars[99] … Chars[0] Chars[1] Chars[24] Chars[25]

사례 연구: 문자 빈도수 세기 - cont Filename : RandomCharacter.py from random import randint # randint를 임포트한다. # ch1과 ch2 사이의 랜덤 문자를 생성한다. def getRandomCharacter(ch1, ch2): return chr(randint(ord(ch1), ord(ch2))) # 랜덤 소문자를 생성한다. def getRandomLowerCaseLetter(): return getRandomCharacter('a', 'z') # 랜덤 대문자를 생성한다. def getRandomUpperCaseLetter(): return getRandomCharacter('A', 'Z') # 랜덤 숫자를 생성한다. def getRandomDigitCharacter(): return getRandomCharacter('0', '9') # 랜덤 문자를 생성한다. def getRandomASCIICharacter(): return getRandomCharacter(chr(0), chr(127)) Filename : RandomCharacter.py

사례 연구: 문자 빈도수 세기 - cont import RandomCharacter # 문자 리스트를 생성한다. def main(): # 문자 리스트를 생성한다. chars = createList() # 리스트를 출력한다. print("소문자:") displayList(chars) # 각 문자의 빈도수를 센다. counts = countLetters(chars) # 빈도수를 출력한다. print("각 문자의 빈도수는:") displayCounts(counts) # 문자 리스트를 생성한다. def createList(): # 빈 리스트를 생성한다. chars = [] # 소문자를 랜덤하게 생성하고 리스트에 추가한다. for i in range(100): chars.append(RandomCharacter.getRandomLowerCaseLetter()) # 리스트를 반환한다. return chars # 문자 리스트를 출력한다. def displayList(chars): # 리스트에 포함된 문자를 한 행에 20개씩 출력한다. for i in range(len(chars)): if (i + 1) % 20 == 0: print(chars[i]) else: print(chars[i], end = ' ')

사례 연구: 문자 빈도수 세기 - cont Filename : CountLettersInList.py # 각 문자의 빈도수를 센다. def countLetters(chars): # 0으로 초기화된 26개의 정수 리스트를 생성한다. counts = 26 * [0] # 리스트의 각 소문자를 센다. for i in range(len(chars)): counts[ord(chars[i]) - ord('a')] += 1 return counts # 빈도수를 출력한다. def displayCounts(counts): for i in range(len(counts)): if (i + 1) % 10 == 0: print(counts[i], chr(i + ord('a'))) else: print(counts[i], chr(i + ord('a')), end = ' ') main() # main 함수를 호출한다. Filename : CountLettersInList.py

이차원 리스트 다음의 표는 이차원 리스트의 형태로 표현이 가능하다. distances = [ 서울 대전 광주 대구 울산 전주 순천 부산 151 290 282 396 210 320 390 178 148 259 90 235 260 219 327 105 93 267 87 198 218 130 308 199 65 141 265 distances = [ [0, 151, 290, 282, 396, 210, 320, 390], [151, 0, 178, 148, 259, 90, 235, 260], [290, 178, 0, 219, 327, 105, 93, 267], [282, 148, 219, 0, 87, 198, 218, 130], [396, 259, 327, 87, 0, 308, 199, 65], [210, 90, 105, 198, 308, 0, 141, 265], [320, 235, 93, 218, 199, 141, 0, 199], [390, 260, 267, 130, 65, 265, 199, 0], ]

2차원 리스트 처리하기 2차원 리스트는 행으로 이루어진 리스트라고 생각할 수 있다. 각의 행은 여러 개의 값을 포함하는 또 다른 리스트이다. 행은 인덱스를 사용하여 접근될 수 있는데, 관례적으로 이 인덱스를 행 인덱스(row index)라고 한다. 행의 각 값들은 열 인덱스(column index)라고 하는 또 다른 인덱스를 통해 접근될 수 있다. matrix = [ [1, 2, 3, 4, 5], [6, 7, 0, 0, 0], [0, 1, 0, 0, 0], [1, 0, 0, 0, 8], [0, 0, 9, 0, 3], ] matrix[0] 은 [1, 2, 3, 4, 5]이다 matrix[1] 은 [6, 7, 0, 0, 0]이다 matrix[2] 은 [0, 1, 0, 0, 0]이다 matrix[3] 은 [1, 0, 0, 0, 8]이다 matrix[4] 은 [0, 0, 9, 0, 3]이다 matrix[0][0]은 1이다 Matrix[4][4]은 3이다

입력값으로 리스트 초기화하기 matrix = [] # 비어있는 리스트를 생성한다 numberOfRows = eval(input("행의 개수를 입력하세요: ")) numberOfColumns = eval(input("열의 개수를 입력하세요: ")) for row in range(0, numberOfRows): matrix.append([]) # 새로운 빈 행을 추가한다 for column in range(0, numberOfColumns): value = eval(input("원소를 입력하고 엔터를 누르세요: ")) matrix[row].append(value) print(matrix)

랜덤 값으로 리스트 초기화하기 import random matrix = [] # 비어있는 리스트를 생성한다. numberOfRows = eval(input("행의 개수를 입력하세요: ")) numberOfColumns = eval(input("열의 개수를 입력하세요: ")) for row in range(0, numberOfRows): matrix.append([]) # 새로운 빈 행을 추가한다. for column in range(0, numberOfColumns): matrix[row].append(random.randrange(0, 100)) print(matrix)

리스트 출력하기 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #리스트는 주어진다. for row in range(0, len(matrix)): for column in range(0, len(matrix[row])): print(matrix[row][column], end = " ") print() # 새로운 행을 출력한다.

모든 원소 합계 구하기 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 리스트는 주어진다. total = 0 for row in range(0, len(matrix)): for column in range(0, len(matrix[row])): total += matrix[row][column] print("Total is " + str(total)) # 합계를 출력한다.

열의 원소 합계 구하기 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 리스트는 주어진다. total = 0 for column in range(0, len(matrix[0])): for row in range(0, len(matrix)): total += matrix[row][column] print(column, "번째 열의 합계는", total, "입니다.")

합계가 가장 큰 행 찾기 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # Assume a list is given maxRow = sum(matrix[0]) # maxRow에 첫 번째 행의 합계를 저장한다. indexOfMaxRow = 0 for row in range(1, len(matrix)): if sum(matrix[row]) > maxRow: maxRow = sum(matrix[row]) indexOfMaxRow = row print(indexOfMaxRow, "번째 행의 합계", maxRow, "가 가장 큽니다.")

무작위로 섞기 import random matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 리스트는 주어진다. for row in range(0, len(matrix)): for column in range(0, len(matrix[row])): i = random.randrange(0, len(matrix)) j = random.randrange(0, len(matrix[row])) # matrix[row][column]와 matrix[i][j]를 교환한다. matrix[row][column], matrix[i][j] = \ matrix[i][j], matrix[row][column] print(matrix)

사례 연구: 생일 맞히기 def main(): day = 0 # Day to be determined dates = [ [[ 1, 3, 5, 7], [ 9, 11, 13, 15], [17, 19, 21, 23], [25, 27, 29, 31]], [[ 2, 3, 6, 7], [10, 11, 14, 15], [18, 19, 22, 23], [26, 27, 30, 31]], [[ 4, 5, 6, 7], [12, 13, 14, 15], [20, 21, 22, 23], [28, 29, 30, 31]], [[ 8, 9, 10, 11], [24, 25, 26, 27], [[16, 17, 18, 19], [28, 29, 30, 31]]] for i in range(5): print("Is your birthday in Set" + str(i + 1) + "?") for j in range(4): for k in range(4): print(format(dates[i][j][k], '4d'), end = " ") print() answer = eval(input("Enter 0 for No and 1 for Yes: ")) if answer == 1: day += dates[i][0][0] print("Your birth day is " + str(day)) main() # Call the main function

스도쿠 5 3 7 6 1 9 8 4 2 http://terms.naver.com/entry.nhn?docId=3567890&cid=58944&categoryId=58970

모든 행은 1 – 9 사이의 숫자를 포함 5 3 7 6 1 9 8 4 2 5 3 4 6 7 8 9 1 2

모든 열은 1 – 9 사이의 숫자를 포함 5 3 7 6 1 9 8 4 2 5 3 4 6 7 8 9 1 2

모든 3×3 상자는 1 – 9 사이의 숫자를 포함 5 3 7 6 1 9 8 4 2 5 3 4 6 7 8 9 1 2

풀이가 정확한지 확인 5 3 7 6 1 9 8 4 2 5 3 4 6 7 8 9 1 2

풀이가 정확한지 확인 - cont Filename : CheckSudokuSolution.py # 풀이가 유효한지 검사한다. def isValid(grid): for i in range(9): for j in range(9): if grid[i][j] < 1 or grid[i][j] > 9 \ or not isValidAt(i, j, grid): return False return True # 고정 셀은 유효하다. # 그리드에서 grid[i][j]가 유효한지 검사한다. def isValidAt(i, j, grid): # i번 행에서 grid[i][j]가 유효한지 검사한다. for column in range(9): if column != j and grid[i][column] == grid[i][j]: # j번 열에서 grid[i][j]가 유효한지 검사한다. for row in range(9): if row != i and grid[row][j] == grid[i][j]: return False # 3 X 3에서 grid[i][j]가 유효한지 검사한다. for row in range((i // 3) * 3, (i // 3) * 3 + 3): for col in range((j // 3) * 3, (j // 3) * 3 + 3): if row != i and col != j and \ grid[row][col] == grid[i][j]: return True # grid[i][j]의 현재값은 유효하다. Filename : CheckSudokuSolution.py

풀이가 정확한지 확인 - cont Filename : TestCheckSudokuSolution.py from CheckSudokuSolution import isValid def main(): # Read a Sudoku solution grid = readASolution() if isValid(grid): print("Valid solution") else: print("Invalid solution") # Read a Sudoku solution from the console def readASolution(): print("Enter a Sudoku puzzle solution:") grid = [] for i in range(9): line = input().strip().split() grid.append([eval(x) for x in line]) return grid main() # Call the main function Filename : TestCheckSudokuSolution.py

스도쿠 GUI

스도쿠 GUI - cont from tkinter import * # tkinter의 모든 정의를 임포트한다. import tkinter.messagebox # tkinter.messagebox를 임포트한다. from CheckSudokuSolution import isValid class SudokuGUI: def __init__(self): window = Tk() # 윈도우를 생성한다. window.title("스도쿠 풀이를 검사한다") # 제목을 설정한다. frame = Frame(window) # 엔트리 위젯을 수용한다. frame.pack() self.cells = [] # 엔트리에 연결되는 변수 리스트 for i in range(9): self.cells.append([]) for j in range(9): self.cells[i].append(StringVar()) Entry(frame, width = 2, justify = RIGHT, textvariable = self.cells[i][j]).grid(row = i, column = j)

스도쿠 GUI - cont Filename : SudokuGUI.py Button(window, text = "검사", command = self.validate).pack() window.mainloop() # 이벤트 루프를 생성한다. # 입력된 숫자가 정확한 풀인지 검사한다. def validate(self): # 엔트리 위젯에서 숫자를 가져온다. values = [[eval(x.get()) for x in self.cells[i]] for i in range(9)] if isValid(values): tkinter.messagebox.showinfo("스도쿠 풀이 검사", "이 풀이는 정확합니다.") else: tkinter.messagebox.showwarning("스도쿠 풀이 검사",”이 풀이는 정확하지 않습니다.") SudokuGUI() # GUI를 생성한다. Filename : SudokuGUI.py

튜플 튜플은 리스트와 유사하지만, 원소가 고정되어 있다는 점이 다르다. 즉, 튜플이 일단 생성되면, 튜플에 새로운 원소를 추가, 삭제, 다른 원소로 대체, 혹은 순서를 바꾸는 것을 허용하지 않는다. 애플리케이션에서 리스트의 내용을 전혀 변경할 의도가 없다면, 튜플을 사용하여 실수로 추가, 삭제, 변경되는 것을 막을 수 있다. 튜플(tuple)은 원소가 고정되어 있다는 점만 제외하면 리스트와 매우 유사하다.

튜플 생성 t1 = () # 빈 튜플을 생성 t2 = (1, 3, 5) # 세 원소를 가진 튜플을 생성 # 리스트로부터 튜플을 생성 t3 = tuple([2 * x for x in range(1, 5)]) # 문자열로부터 튜플을 생성 t4 = tuple("abac") # t4 is ['a', 'b', 'a', 'c']

튜플 데모 Filename : tupleDemp.py tuple1 = ("초록", "빨강", "파랑") # 튜플을 생성한다. print(tuple1) # 리스트로부터 튜플을 생성한다. tuple2 = tuple([7, 1, 2, 23, 4, 5]) print(tuple2) # len 함수를 사용한다. print("길이는", len(tuple2), "입니다.") # max 함수를 사용한다. print("최댓값은", max(tuple2), "입니다.") # min 함수를 사용한다. print("최솟값은", min(tuple2), "입니다.") # sum 함수를 사용한다. print("합계는", sum(tuple2), "입니다.") # 인덱스 연산자를 사용한다. print("첫 번째 원소는", tuple2[0]) # 두 개의 투플을 결합한다. tuple3 = tuple1 + tuple2 print(tuple3) tuple3 = 2 * tuple1 # 투플을 중복한다. print(tuple3) print(tuple2[2 : 4]) # 슬라이싱 연산자 print(tuple1[-1]) print(2 in tuple2) # in 연산자 for v in tuple1: print(v, end = " ") print() list1 = list(tuple2) # 튜플로부터 리스트를 생성한다. list1.sort() tuple4 = tuple(list1) tuple5 = tuple(list1) print(tuple4) print(tuple4 == tuple5) # 두 투플을 비교한다. Filename : tupleDemp.py

세트 원소를 저장한다는 점에서 세트는 리스트와 유사하다. 그러나 리스트와 달리 세트의 원소들은 중복되지 않으며 특정한 순서로 놓이지 않는다. 애플리케이션에서 원소 순서에 상관없이 원소를 사용한다면, 세트(set)를 사용하는 것이 리스트를 사용하는 것보다 좀 더 효율적이다. 중괄호 쌍({})의 안쪽에 원소들을 놓음으로써 원소들로 구성된 세트를 생성할 수 있다.

세트 생성하기 s1 = set() # 빈 세트를 생성 s2 = {1, 3, 5} # 3개 원소를 가진 세트를 생성 #리스트로부터 세트를 생성 s4 = set([x * 2 for x in range(1, 10)]) # 문자열로부터 세트를 생성 s5 = set("abac") # s5 is {'a', 'b', 'c'}

세트 다루기와 접근하기 >>> s1 = {1, 2, 4} >>> s1.add(6) {1, 2, 4, 6} >>> len(s1) 4 >>> max(s1) 6 >>> min(s1) 1 >>> sum(s1) 13 >>> 3 in s1 False >>> s1.remove(4) >>> s1 {1, 2, 6} >>>

부분세트와 상위세트 >>> s1 = {1, 2, 4} >>> s1.issubset(s2) # s1은 s2의 부분세트이다. True >>> >>> s1 = {1, 2, 4} >>> s2 = {1, 4, 5, 2, 6} >>> s2.issuperset(s1) # s2는 s1의 상위세트이다. True >>>

동등 검사 >>> s1 = {1, 2, 4} >>> s2 = {1, 4, 2} True >>> s1 != s2 False >>>

세트 연산 (합, |) >>> s1 = {1, 2, 4} >>> s2 = {1, 3, 5} >>> s1.union(s2) {1, 2, 3, 4, 5} >>> >>> s1 | s2

세트 연산 (교, &) >>> s1 = {1, 2, 4} >>> s2 = {1, 3, 5} >>> s1.intersection(s2) {1} >>> >>> s1 & s2

세트 연산 (차, -) >>> s1 = {1, 2, 4} >>> s2 = {1, 3, 5} >>> s1.difference(s2) {2, 4} >>> >>> s1 - s2

세트 연산 (대칭차, ^) >>> s1 = {1, 2, 4} >>> s2 = {1, 3, 5} >>> s1.symmetric_difference(s2) {2, 3, 4, 5} >>> >>> s1 ^ s2

세트 데모 Filename : setDemo.py print(set1) set2 = set([7, 1, 2, 23, 2, 4, 5]) # 리스트로부터 세트를 생성한다. print(set2) print("빨강이 set1에 있습니까?", "빨강" in set1) # len 함수를 사용한다. print("길이는", len(set2), "입니다.") # max 함수를 사용한다. print("최댓값은", max(set2), "입니다.") # min 함수를 사용한다. print("최솟값은", min(set2), "입니다.") # sum 함수를 사용한다. print("합계는", sum(set2), "입니다.") set3 = set1 | {"초록", "노랑"} # 세트 합 print(set3) set3 = set1 - {"초록", "노랑"} # 세트 교 set3 = set1 & {"초록", "노랑"} # 세트 차 set3 = set1 ^ {"초록", "노랑"} # 세트 대칭차 list1 = list(set2) # 세트로부터 리스트를 생성한다. print(set1 == {"green", "red", "blue"}) # 두 세트 비교 set1.add("노랑") print(set1) set1.remove("노랑") Filename : setDemo.py

딕셔너리 왜 딕셔너리를 사용해야 하는가? 만약에 어떤 프로그램이 백만 명의 학생에 대한 정보를 저장하고 주민등록번호로 학생 정보를 자주 검색한다고 가정해보자. 이 작업을 위한 효율적인 데이터 구조는 딕셔너리이다. 딕셔너리는 키와 함께 값을 저장하는 데이터 집합이다. 키는 인덱스 연산자 처럼 사용된다.

키/값 쌍 검색 키 값 딕셔너리 항목 ... ...

딕셔너리 생성하기 # 빈 딕셔너리를 생성 student = {} # 딕셔너리를 생성

항목 추가, 수정하기 딕셔너리에서 한 항목을 추가하기 위해 다음과 같은 구문을 사용한다. 딕셔너리_이름[키] = 값 예를 들어, 딕셔너리_이름[키] = 값 student["234-56-9010"] = "영희"

항목 삭제하기 딕셔너리에서 한 항목을 삭제하기 위해 다음과 같은 구문을 사용한다. del 딕셔너리_이름[키] 예를 들어, del student["234-56-9010"]

항목 순회하기 딕셔너리에 포함된 모든 항목을 순회하기 위해 다음 구문을 사용한다. for key in dictionary: print(key + ":" + str(dictionary[key]))

len 함수 len(dictionary)을 사용하여 딕셔너리 내의 항목 수를 얻을 수 있다. >>> student = {“111-34-3434":“경석”, “132-56-6290”:“우성”} >>> len(students) 2 >>>

딕셔너리 메소드 str keys(): tuple 일련의 키들을 반환한다. values(): tuple 일련의 값들을 반환한다. items(): tuple clear(): None get(key): value pop(key): value popitem(): tuple 일련의 키들을 반환한다. 일련의 값들을 반환한다. 일련의 투플들을 반환한다. 각 투플은 항목별로 (키, 값)의 형태이다. 모든 항목들을 삭제한다. 키에 대한 값을 반환한다. 키에 대한 항목을 삭제하고 그 항목의 값을 반환한다. 랜덤하게 선택된 키/값 쌍을 투플 형태로 반환하고 선택된 항목을 삭제한다.

Reference 파이썬, Y.Daniel Liang 저, 길준민, 정재화 역, 생능출판 Introduction to Programming Using Python, Y. Daniel Liang 저자 사이트 : http://www.cs.armstrong.edu/liang/py/