10장 리스트

Similar documents
17장 클래스와 메소드

8장 문자열

설계란 무엇인가?

PowerPoint Presentation

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint Presentation

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

쉽게 풀어쓴 C 프로그래밍

chap 5: Trees

쉽게 풀어쓴 C 프로그래밍

금오공대 컴퓨터공학전공 강의자료

11장 포인터

3장 함수

14장 파일

쉽게 풀어쓴 C 프로그래밍

단순 베이즈 분류기

Multi-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

PowerPoint 프레젠테이션

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

설계란 무엇인가?

Microsoft PowerPoint - C++ 5 .pptx

기술통계

쉽게

PowerPoint 프레젠테이션


JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA PROGRAMMING 실습 02. 표준 입출력

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

금오공대 컴퓨터공학전공 강의자료

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

PowerPoint Presentation

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Data Structure

확률 및 분포

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

JUNIT 실습및발표

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - 제11장 포인터

R R ...

PowerPoint 프레젠테이션

Chapter 4. LISTS

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

슬라이드 1

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

Chapter 4. LISTS

Microsoft PowerPoint - logo_3.ppt [호환 모드]

03_queue

PowerPoint Presentation

강의 개요

Microsoft PowerPoint - 제11장 포인터(강의)

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Java ...

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint Template

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint - chap05-제어문.pptx

쉽게 풀어쓴 C 프로그래밍

윈도우즈프로그래밍(1)

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap10-함수의활용.pptx

슬라이드 1

Microsoft PowerPoint - chap06-5 [호환 모드]

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

슬라이드 1

Microsoft PowerPoint 세션.ppt

14장 파일

PowerPoint Template


untitled

COVER.HWP

이슈분석 2000 Vol.1

가볍게읽는-내지-1-2

한눈에-아세안 내지-1

kbs_thesis.hwp


Microsoft PowerPoint - web-part02-ch15-문서객체조작.pptx

Index

chap x: G입력

Tcl의 문법

APCPCWM_ :WP_GLOBAL_PFWP_GLOBAL_PF APCPCWM_ :WP_GLOBAL_PFWP_GLOBAL_PF 예제로보는 네트워크엔지니어를위한 Python 101

Lab 3. 실습문제 (Single linked list)_해답.hwp

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint - chap06-1Array.ppt

Visual Basic 반복문

PowerPoint Presentation

JVM 메모리구조

PowerPoint Presentation

tkinter를 이용한 계산기 구현

PowerPoint 프레젠테이션

PowerPoint Presentation

교육자료

adfasdfasfdasfasfadf

쉽게 풀어쓴 C 프로그래밍

Transcription:

10 장리스트 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 1 / 32

학습내용 리스트가변성 (mutability) 가로지르기 (traversing) 연산부분추출메소드 (method) 맵, 필터, 리듀스 (map, filter, and reduce) 원소제거하기 (deleting element) 리스트와문자열객체와값별명 (aliasing) 리스트인자 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 2 / 32

리스트 리스트는원소 (element) 또는품목 (item) 이라불리는값들의열이며문자열과달리타입에제한이없음 리스트내에리스트가중첩 (nest) 될수있으며원소들의타입이서로다를수있음 >>> cheeses = [ Cheddar, Edam, Gouda ] >>> numbers = [17, 123] >>> empty = [] >>> print(cheeses, numbers, empty) [ Cheddar, Edam, Gouda ] [17, 123] [] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 3 / 32

가변성 리스트는문자열과는달리변경이쉬움 (mutable) >>> numbers = [17, 123] >>> numbers[1] = 5 >>> print(numbers) [17, 5] 인덱스에대한규칙 정수값은인덱스로사용가능존재하지않는원소에접근하는경우 IndexError 발생음수값의인덱스는리스트의끝에서부터거꾸로셈 >>> Edam in cheeses True >>> Brie in cheeses False 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 4 / 32

가로지르기 I 읽기만하는경우인덱스필요하지않지만변경시인덱스필요 >>> for cheese in cheeses: print(cheese) Cheddar Edam Gouda >>> for i in range(len(numbers)): numbers[i] = numbers[i] * 2 >>> print(numbers) [34, 10] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 5 / 32

가로지르기 II 빈리스트에서는루프작동안함 >>> for x in []: print( This never happens. ) 중첩된리스트도원소로간주됨 >>> x = [ spam, 1, [ Brie, Roquefort, Pol le Veq ], [1, 2, 3]] >>> x[2] [ Brie, Roquefort, Pol le Veq ] >>> len(x) 4 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 6 / 32

연산 + 는두리스트를연결 >>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> c = a + b >>> print(c) [1, 2, 3, 4, 5, 6] * 는주어진횟수만큼리스트를반복 >>> [0] * 4 [0, 0, 0, 0] >>> [1, 2, 3] * 3 [1, 2, 3, 1, 2, 3, 1, 2, 3] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 7 / 32

부분추출 문자열처럼부분추출사용가능 >>> t = [ a, b, c, d, e, f ] >>> t[1:3] [ b, c ] >>> t[:4] [ a, b, c, d ] >>> t[3:] [ d, e, f ] >>> t[:] [ a, b, c, d, e, f ] 문자열과는달리원소변경이가능 >>> t[1:3] = [ x, y ] >>> print(t) [ a, x, y, d, e, f ] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 8 / 32

리스트메소드 I append 는새원소를리스트끝에붙임 >>> t = [ a, b, c ] >>> t.append( d ) >>> print(t) [ a, b, c, d ] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 9 / 32

리스트메소드 II extend 는리스트를인자로받아모든원소를붙일수있고 insert 는해당인덱스에추가 >>> t1 = [ a, b, c ] >>> t2 = [ d, e ] >>> t1.extend(t2) >>> print(t1) [ a, b, c, d, e ] >>> t2.insert(3, f ) >>> print(t2) [ d, e, f ] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 10 / 32

리스트메소드 III remove 는리스트에서해당원소를제거하며 index 는원소의인덱스값반환 >>> t = [ a, b, c ] >>> t.remove( b ) >>> print(t) [ a, c ] >>> t.index( a ) 0 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 11 / 32

리스트메소드 IV sort 는리스트의원소를정렬하고 reverse 는역순으로함 >>> t = [ d, c, e, b, a ] >>> t.sort() >>> print(t) [ a, b, c, d, e ] >>> t.reverse() >>> t [ e, d, c, b, a ] 리스트메소드는반환값이없음 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 12 / 32

맵, 필터, 리듀스 I 리스트의숫자들의합 def add_all(t): total = 0 for x in t: total += x return total total += x 는 total = total + x 와동치 원소들의열을하나의값으로만드는연산을 reduce 라고함 >>> t = [1, 2, 3] >>> sum(t) 6 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 13 / 32

맵, 필터, 리듀스 II 문자열을대문자로변환하여뒤에붙임 def capitalize_all(t): res = [] for s in t: res.append(s.capitalize()) return res 메소드 (capitalize) 를열의원소각각에매핑시키므로 map 이라불림 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 14 / 32

맵, 필터, 리듀스 III 문자열을입력받아대문자로이루어진문자열만반환 def only_upper(t): res = [] for s in t: if s.isupper(): res.append(s) return res 일부의원소만을선택하고나머지는걸르는것을필터라함 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 15 / 32

맵, 필터, 리듀스 IV 대부분의리스트연산은맵, 필터, 리듀스의결합으로표현됨 Python 에서는내장함수 map 과 list comprehension 이라불리는연산등의기능을제공함 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 16 / 32

원소제거하기 I 리스트에서제거할원소의인덱스를알고제거된원소값이필요한경우 pop 을사용. 인덱스를주지않으면마지막원소를지우고그값을반환함 >>> t = [ a, b, c ] >>> x = t.pop(1) >>> print(t) [ a, c ] >>> print(x) b 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 17 / 32

원소제거하기 II 제거된원소가필요하지않고제거할원소의인덱스를알면 del 을사용하고, 인덱스대신제거할값을아는경우 remove 를사용 >>> t = [ a, b, c ] >>> del t[1] >>> print(t) [ a, c ] >>> t = [ a, b, c ] >>> x = t.remove( b ) >>> print(t) [ a, c ] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 18 / 32

원소제거하기 III 여러원소들을제거할때 >>> t = [ a, b, c, d, e, f ] >>> del t[1:5] >>> print(t) [ a, f ] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 19 / 32

리스트와문자열 I 문자들의리스트는문자열은아님 문자열을리스트로변환하려면 list 사용 >>> s = spam >>> t = list(s) >>> print(t) [ s, p, a, m ] 문자열을단어로쪼개기위해 split 사용 >>> s = printing for the fjords >>> t = s.split() >>> print(t) [ printing, for, the, fjords ] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 20 / 32

리스트와문자열 II delimiter 는단어의경계지정 >>> s = spam-spam-spam >>> delimiter = - >>> s.split(delimiter) [ spam, spam, spam ] join 은문자열을연결 >>> t = [ pining, for, the, fjords ] >>> delimiter = >>> delimiter.join(t) pining for the fjords 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 21 / 32

객체와값 is 연산자를이용하여두변수가동일한객체를가리키는지확인 >>> a = banana >>> b = banana >>> a is b True 리스트의경우 >>> a = [1, 2, 3] >>> b = [1, 2, 3] >>> a is b False 두리스트 a 와 b 는동등 (equivalent) 하지만동일 (identical) 하지는않음 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 22 / 32

별명 변수를객체와연관시키는것을참조 (reference) 라하며예에서는동일한객체에두참조가있음 >>> a = [1, 2, 3] >>> b = a >>> b is a True 이처럼둘이상의참조가있는객체는두이름이있고이러한객체를별명이있다고함 객체가변경가능한경우에러가생기기쉬워바람직하지않음 >>> b[0] = 17 >>> print(a) [17, 2, 3] 문자열처럼변경이불가능한경우에는큰상관이없음 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 23 / 32

리스트인자 I 리스트의첫원소를제거하는함수 >>> def delete_head(t): del t[0] >>> letters = [ a, b, c ] >>> delete_head(letters) >>> print(letters) [ b, c ] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 24 / 32

리스트인자 II 리스트를수정하는연산과새로운리스트를생성하는연산을구별해야함. append 는기존의리스트를수정하며 + 연산자는새로운리스트생성 >>> t1 = [1, 2] >>> t2 = t1.append(3) >>> print(t1) [1, 2, 3] >>> print(t2) None >>> t3 = t1 + [4] >>> print(t3) [1, 2, 3, 4] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 25 / 32

리스트인자 III 리스트를수정하지않는경우 >>> def bad_delete_head(t): t = t[1:] 부분추출은새로운리스트를생성하며파라미터 t 가참조하는원래의객체를건드리지않음. 대안으로다음을고려할수있음. 마찬가지로원래의리스트를변경하지는않음 >>> def tail(t): return t[1:] >>> letters = [ a, b, c ] >>> rest = tail(letters) >>> print(rest) [ b, c ] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 26 / 32

디버깅 I 문자열메소드의경우원본은놔두고새로운문자열을주는반면대부분의리스트메소드는인자로주어진리스트를변경하고 None 을반환함 word = word.strip() # OK(word: string) t = t.sort() # wrong(t: list) 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 27 / 32

디버깅 II t 는리스트이고 x 는리스트원소일때다음은옳지만 t.append(x) t = t + [x] 다음은틀림 t.append([x]) t = t.append(x) t + [x] t = t + x 마지막문장만실행오류가발생 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 28 / 32

디버깅 III 원본을유지하고싶은경우원리스트의복사본생성 orig = t[:] t.sort() 혹은 sorted 함수를이용하면원리스트는놔두고정렬된새리스트를생성 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 29 / 32

예제 I >>> x = range(10) >>> print(x[0]) 0 >>> print(x[1]) 1 >>> print(x[-1]) 9 >>> print(x[-2]) 8 >>> print(x[:3]) range(0, 3) >>> print(x[3:]) range(3, 10) 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 30 / 32

예제 II >>> print(x[1:5]) range(1, 5) >>> print(x[-3:]) range(7, 10) >>> print(x[1:-1]) range(1, 9) >>> 1 in [1,2,3] True >>> 0 in [1,2,3] False >>> x = [1,2,3] >>> x.extend([4,5,6]) >>> print(x) [1, 2, 3, 4, 5, 6] >>> x = [1,2,3] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 31 / 32

예제 III >>> y = x + [4,5,6] >>> print(x, y) [1, 2, 3] [1, 2, 3, 4, 5, 6] >>> x.append(0) >>> print(x) [1, 2, 3, 0] 박창이 ( 서울시립대학교통계학과 ) 10 장리스트 32 / 32