6. 함수


반복 사용이 가능한 명령어 모음 블록인데 제어문과 다른 점은 제어문은 프로그램 문장에 존재 해야 하지만 함수는 다른 곳에 정의를 해놓고 필요할 때마다 호출을 하여 사용이 가능한 블록이라고 정의 할 수 있습니다.  함수에 값을 전달 할 수도 있고 값을 리턴 받을 수도 있고 단순히 호출만 할 수도 있습니다.

함수를 어떻게 만드는가에 따라 여러 명이 분업도 가능하고 프로그램도 깔끔하게 마무리 할 수 있습니다.

 

6.1 사용자 정의 함수


함수는 껍데기일 뿐이므로 이름만 목적에 맞게 잘 만들면 그것으로 반은 성공 한거고 안에 뭘 채우냐가 중요합니다.

 

6.1.1 함수 정의


함수의 정의는 def를 사용 하고. 함수 블록은 함수 정의 아래에 들여쓰기를 사용 합니다.  함수에 값을 전달 하려면 파라미터를 사용하고 함수를 호출한 곳으로 값을 넘기려면 return을 사용 합니다.  파라미터와 return은 필요 없으면 생략 가능 합니다.

def 함수명(*파라미터)

   수행 명령어

   수행 명령어

       ...

   return 결과 값

 

python study

 


6.1.2 함수 호출


함수 호출은 def로 정의한 함수명에 파라미터를 추가하고 함수에서 return하는 값을 받을 변수를 정의하면 됩니다.

리턴값저장변수 = 함수명(*파라미터)

 

6.1.3 예제


함수는 사용 전에 정의가 되어 있어야 합니다. hello("HongGil")이 먼저 있으면 함수를 찾을 수 없다고 오류가 발생 합니다.  함수가 복잡하면 파일로 만들어 import하여 사용 합니다.

 

#-*- coding: euc-kr -*-

 

def hello(name):

           print(name + " hello!")

 

hello("HongGil")

hello("순이")

결과

(base) F:\Python>python function101.py

HongGil hello!

순이 hello!

 

전달하는 파라미터의 갯수를 모를 경우 “*파라미터이렇게 파라미터를 대표할 수 있는 명칭 앞에 *를 사용 합니다.

def addNum(*nums):

           added = 0

           for i in nums:

                     added += i

           return added

 

numSum = addNum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

print(numSum)

결과

(base) F:\Python>python function102.py

55

 

6.1.4 global


함수 내부에서 사용되는 변수는 명칭이 동일 해도 외부와 무관합니다.  다른 사람이 만든 함수를 import 해서 사용하는데 내부에 있는 변수 명을 알 수 없을 때 동일 한 함수 명이 자신의 코드에도 존재 한다면 진짜 맨붕이 올 수 있기 때문에 전혀 다른 메모리 주소를 사용 합니다.

a = 1

def varTest(a):

           print('1st : ' + str(a))

           a = 2

           print('2nd : ' + str(a))

 

varTest(a)

print('3rd : ' + str(a))

결과

(base) F:\Python>python function103.py

1st : 1

2nd : 2

3rd : 1

난 죽어도 함수 내부에 있는 변수와 밖에 있는 변수를 동일하게 사용하고 싶다.  그러면 global 명령어를 사용하면 됩니다.

위에 있는 코드와 비교하면 알겠지만 global로 선언 하면 함수에도 적용을 하겠다는 의미로 파라미터로 전송하면 오류가 발생합니다.

a = 1

def varTest():

           global a

           print('1st : ' + str(a))

           a = 2

           print('2nd : ' + str(a))

 

varTest()

print('3rd : ' + str(a))

결과

(base) F:\Python>python function104.py

1st : 1

2nd : 2

3rd : 2

 

 

6.1.5 기본 값


함수를 호출 할 때 파라미터에 값을 넘겨주지 않아도 기본으로 설정한 값을 사용하기 위한 방법 입니다.

 

#-*- coding: euc-kr -*-

 

def levelTest(name, score, level = 90):

           if score >= level:

                     print(name + "님 축하 합니다. 테스트에 성공 했습니다!!")

           else:

                     print(name + "님 안타깝습니다. 좀더 노력 하세요.")

 

levelTest("강감찬", 95)

levelTest("홍길동", 30, 30)

결과

(base) F:\Python>python function105.py

강감찬님 축하 합니다. 테스트에 성공 했습니다!!

홍길동님 축하 합니다. 테스트에 성공 했습니다!!

 

6.1.6 return


함수로 부터 리턴되는 값은 꼭 하나일 필요는 없습니다. 콤마(,)를 사용하면 다양한 형태로 여러 개의 값을 받아올 수 있습니다.

 

#-*- coding: euc-kr -*-

 

def returnTest(i, j):

                     k = i + j

                     return i, "더하기", j, k, (i, j, k), {i, j, k}, [i, j, k]

 

r1, r2, r3, r4, r5, r6, r7 = returnTest(10, 20)

print(r1, r2, r3, r4, r5, r6, r7)

결과

(base) F:\Python>python function106.py

10 더하기 20 30 (10, 20, 30) {10, 20, 30} [10, 20, 30]

 

 

 

6.2 람다 함수


람다는 익명 함수라고 부르며 def로 선언을 하지 않지만 함수처럼 사용합니다. 인수(argument)의 제한은 없지만 표현식(expression)1개만 사용 가능 합니다.  람다함수는 오브젝트로 생성되지 않기 때문에 간단하게 사용이 가능합니다.

표현 형식은 아래와 같습니다.

lambda arguments: expression

 

람다를 선언할 때 동시에 값을 설정할 수도 있고 변수에 값을 대입하고 람다에 추가하여 사용할수도 있습니다.

>>> (lambda x : x + 10)(3)

13

>>> k = 100

>>> (lambda x : x + 200)(k)

300

>>> k = 100

>>> a = (lambda x : x + 200)(k)

>>> print(a)

300

 

람다 선언 후 함수처럼 호출 하여 사용 하는 경우

>>> a = lambda x : x + 100

>>> print(a(8))

108

>>> a = lambda x : x + ' 안녕하세요'

>>> a('홍길동')

'홍길동 안녕하세요'

 

인수가 여러 개인 경우

>>> a = lambda x, y, z : x * y * z

>>> print(a(4, 5, 6))

120

 

- copy coding -

 

5. 제어문(if, for, while, break, continue)

 

컴퓨터를 사용하는 이유 중 하나가 제어문과 함수라고 생각이 되는데요바로 반복작업을 모아놓고 수행하는 것 입니다.

제어문을 테스트 하려면 콘솔에서 한 라인씩 실행 할 수 가 없으므로 프로그램을 파일로 저장하고 실행 해야 합니다파일의 확장자를 프로그램명.py”로 하여 저장하고 파일이 저장된 위치 또는 절대 위치로 잡고 “python 프로그램명.py”를 입력하여 테스트 합니다.

 

5.1 if 조건문

 

주어진 조건을 만족 하는 경우에만 조건에 해당하는 블록을 실행 합니다조건의 종료는 콜론을 사용하고 문장 블록은 들여쓰기로 구분 하며 들여쓰기가 중단되는 문장 까지는 모두 실행 합니다.


5.1.1 조건이 1개인 경우


if 하나만 사용합니다.

if 조건문:

   실행할 문장

   실행할 문장

...

파일명 : if001.py

#-*- coding: euc-kr -*-

 

i = 1

if i == 1:

           i = 3

print('최종 i 값은 얼마 인가요? ', i )

실행

(base) F:\Python>python if001.py

최종 i 값은 얼마 인가요?  3

 

python study



5.1.2 조건 1개와 반대가 있는 경우


ifelse를 사용 합니다.

 

if 조건문:

   실행할 문장

   실행할 문장

       ...

else:

실행할 문장

   실행할 문장

       ...

파일명 : if002.py

#-*- coding: euc-kr -*-

 

score = 90

if score >= 90:

           ans = '참 잘 했어요!'

else:

           ans = '좀더 노력 해봐요!'

print('뭐라 하던가요? ', ans)

실행

(base) F:\Python>python if002.py

뭐라 하던가요참 잘 했어요!

 

5.1.3 조건이 여러 개인 경우

if ~ elif ~ elif ~ ... ~ else ~ 와 같이 elif를 반복 사용 합니다.

if 조건문:

   실행할 문장

   실행할 문장

       ...

elif 조건문:

   실행할 문장

   실행할 문장

       ...

elif 조건문:

   실행할 문장

   실행할 문장

       ...

else:

실행할 문장

   실행할 문장

       ...

파일명 : if003.py

#-*- coding: euc-kr -*-

 

score = 505

 

if 700 < score <=990 :

           ans = '원어민과 대화를 통해 심화학습을 추천 합니다.'

elif 500 < score <=700 :

           ans = '문장을 읽는 속도를 빨리해 보세요!'

elif 400 < score <= 500:

           ans = '영어 단어가 부족합니다. 단어공부가 필요합니다.'

else:

           ans = '자신감을 가지고 다시 도전하세요.'

 

print(ans)

실행

(base) F:\Python>python if003.py

문장을 읽는 속도를 빨리해 보세요!

 

 

5.2 for 루프


반복 횟수와 방법을 설정하고 정해진 작업을 반복 수행 하며 아래와 같은 구조 입니다..

for 변수 in 리스트(튜플, 문자열, range):

           명령 문장1

           명령 문장2

           ...

 

5.2.1 리스트

 

리스트의 요소 값을 이용하여 갯수 만큼 반복 하는 경우

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

sm = 0

for i in a:

           sm = sm + i

print(sm)

결과

(base) F:\Python>python for011.py

55

 

문자 리스트도 for문으로 사용할 수 있습니다. 리스트에 리스트가 있는 경우로 해볼까요?

a = ['a', 'b', ['c', 'd'], 'dd', 'eee']

 

for txt in a:

           print(txt)

결과

(base) F:\Python>python for012.py

a

b

['c', 'd']

dd

eee

 

 

 

5.2.2 튜플

 

튜플의 요소 값을 이용하여 리스트와 같은 방식으로 갯수 만큼 반복 수행할 수 있습니다.

a = ('a', 'b', ('c', 'd'), 'dd', 'eee')

 

for txt in a:

           print(txt)

결과

(base) F:\Python>python for021.py

a

b

('c', 'd')

dd

eee

 

튜플을 이용하여 좀더 다른 형태로 for문을 실행할 수 있습니다.

a = ((1, 2), (3, 4), (5, 6))

 

for i, j in a:

           sm = i + j

           print(sm)

결과

(base) F:\Python>python for022.py

3

7

11

 

 

5.2.3 range

 

range(start, stop[, step])를 이용하면 다른 언어에서 for문을 사용하는 방식으로 사용이 가능 합니다.

sm = 0

for i in range(1,11):

           sm += i

print(sm)

결과

(base) F:\Python>python for031.py

55

 

 

5.3 while

 

조건 문이 참일 동안 블록을 반복적으로 실행합니다조건문은 변경이 안되기 떄문에 블록 내에서 조건문을 거짓으로 만들 수 있도록 하거나 break로 종료 시킬 수 있습니다.

bloop = True

i = 0

sm = 0

 

while bloop:

           i += 1

           sm += i

           if i == 10:

                     bloop = False

print(sm)

결과

(base) F:\Python>python while011.py

55

 

 

5.4 break

 

for while 같은 반복문을 중간에 중지 시키는 기능을 하며 break 이후의 명령 문장은 실행되지 않고 바로 블록을 벗어 나기 때문에 위치를 잘 선정해서 사용합니다.

 

bloop = True

i = 0

sm = 0

 

while bloop:

           i += 1

           sm += i

           if i == 11:

                     break;

           print(sm)

결과

(base) F:\Python>python break011.py

1

3

6

10

15

21

28

36

45

55

 

 

5.5 continue

 

반복 문장 블록에 사용되며 continue 명령에 도달하면 이후의 명령 문장은 실행 되지 않고 바로 명령 블록의 처음 문장으로 이동해서 반복 문장 블록을 실행 합니다.

조건에 맞지 않는 값은 처리하지 않거나 조건에 맞을 때까지 기다릴 때 사용합니다.

 

bloop = True

i = 0

sm = 0

 

while bloop:

           i += 1

           sm += i

           if i < 10:

                     continue;

           print(sm)

           bloop = False

결과

(base) F:\Python>python continue011.py

55


- copy coding -


4.2 튜플(tuple)

 

튜플은 데이터의 형태가 리스트와 동일 하지만 표현 방법과 사용 용도는 차이가 있습니다.

- 리스트는 자료를 []으로 감싸지만 튜플은 ()으로 감싸줍니다.

- 리스트는 내부 요소들을 수정, 삭제할 수 있지만 튜플은 불가능 합니다.

튜플은 프로그램이 진행되는 동안 요소들의 값이 변경되거나 삭제되지 않고 프로그램이 종료 할때 까지 동일한 값으로 참조해야 하는 데이터를 정의 하는데 사용됩니다리스트에서 사용되는  함수들 중 값을 변경하거나 삭제하는 부분을 제외하고는 거의 비슷하게 사용이 가능 합니다.

 

 

4.2.1 튜플 만들기


단순히 1개의 숫자, 1개의 문자, 1개의 문자열을 포함할 수도 있지만 그보다는 숫자들의 집합, 문자들의 집합을 하나로 묶어놓은 변수의 개념입니다.

>>> one = (1)

>>> a = (1, 2, 3, 4, 5)

>>> b = ('a', 'b', 'c', 'd')

>>> ab =(1, 2, 3, 4, 5, 'a', 'b', 'c', 'd')

>>> c = (1, 2, 'apple', 'banana')

>>> d = (1, 2, (3, 4), ('apple', 'banana'), True, False)

 

동일한 자료 형으로 튜플을 표현하지 않고 여러 자료 형을 혼합되어 생성 하거나 튜플에 튜플을 포함하여 새로운 튜플 생성이 가능 합니다.

튜플에 튜플을 요소로 추가해서 표현도 가능 합니다.

>>> a = (1, 2, 3, 4, 5)

>>> b = ('a', 'b', 'c', 'd')

>>> ab = (a, b)

>>> print(ab)

((1, 2, 3, 4, 5), ('a', 'b', 'c', 'd'))

 

python study

 


4.2.2 튜플 인텍싱

 

4.2.2.1 튜플 값 꺼내기


튜플에 들어있는 각각의 값들을 구별해 사용하기 위하여 첫 번째, 두 번째, 세 번째이런식으로 번호를 부여 하는데 이것을 인덱싱이라고 하며 0부터 시작을 합니다, 첫 번째가 0, 두 번째가 1… 이렇게 순서가 정해 집니다.

d = (1, 2, (3, 4), ('apple', 'banana'))

여기에서 d[0] 1, d[1] 2가 되며 튜플에 튜플이 포함되어도 하나의 요소로 처리가 되기 때문에 d[2](3, 4)가 됩니다..

d[-1]은 맨 마지막 값인 (“apple”, “banana”)으로 d[3]과 동일 합니다.

그럼 apple을 가리키려면 어떻게 해야 할까요? d3번째 요소에서 또다시 첫 번째인 d[3][0] 또는 d의 맨 마지막 요소 내의 첫 번째인 d[-1][0] 하면 됩니다.

 

>>> d = (1, 2, (3, 4), ('apple', 'banana'))

>>> print(d[0], d[1], d[-1], d[3][0], d[-1][0])

1 2 ('apple', 'banana') apple apple

 

 

4.2.2.2 튜플 연산

 

- 덧셈(+)


덧셈 기호를 이용하여 튜플에 튜플을 더하여 정의 할 수 있습니다.

 

>>> a = ('apple', 'banana')

>>> a = a + a

>>> print(a)

('apple', 'banana', 'apple', 'banana')

>>> b = (1, 2, 3, 4)

>>> a = a + b

>>> print(a)

('apple', 'banana', 'apple', 'banana', 1, 2, 3, 4)

 

- 곱셈(*)


곱셈 기호를 이용하여 튜플에 숫자를 곱하는 것으로 정의 할 수 있습니다곱하는 정수 만큼 튜플이 복제 되어 추가 됩니다.

 

>>> a = ('apple', 'banana')

>>> a = a * 3

>>> print(a)

('apple', 'banana', 'apple', 'banana', 'apple', 'banana')

 

 

4.2.2.3 기타 기능


- len()


len()은 튜플 내부 요소들의 갯수를 구합니다. len(Tuple )으로 사용하며 전체 index 값을 반환 하고 튜플내에 튜플이 있어도 1개로 계산합니다.

 

>>> c = (1, 2, 3, (1, 2, 3), 1, 2, 3)

>>> cnt = len(c)

>>> print(cnt)

7

>>> len(c)

7

  

- index()


index()를 이용하여 값을 입력하면 튜플 내부에 값이 존재 하는 위치의 인덱스를 구할 수 있습니다. index(value) value에 찾으려는 값을 넣어주면 index를 반환합니다튜플 내부에 튜플이 포함된 경우에도 value에 튜플 값을 넣어주면 인덱스가 반환 됩니다.

 

>>> c = (1, 2, 3, (1, 2, 3), 1, 2, 3)

>>> c.index(3)

2

>>> c.index((1,2,3))

3

  

- 슬라이싱


튜플의 index를 이용하여 필요한 부분 만큼 값을 뽑아오는 방법입니다.

a[1:3] : index 값이 1보다 크거나 같고 3 미만(1<= a[index] < 3)

a[:3] : index 값이 처음부터 3 미만( a[index] < 3)

a[3:] : index 값이 3보다 크거나 같은 값(3 <= a[index])

 

>>> a = (1, 2, 3, 4, 5, 6, 7)

>>> print(a[1:3])

(2, 3)

>>> print(a[:3])

(1, 2, 3)

>>> print(a[3:])

(4, 5, 6, 7)

 

기타 리스트에서 사용할 수 있는 기능 중 값을 수정, 삭제, 추가하는 기능은 튜플에서 오류가 발생 합니다.

 

 

4.3 집합

 

단어 그대로 집합을 표현하기 위한 자료형 입니다선언은 set을 사용하여 정의 합니다.  set의 특징은 중복 값을 추가할 수 없고 요소들의 배열 순서를 정할 수 없는 집합입니다.

 

4.3.1 집합 선언


집합은 set을 이용하여 따옴표로 값을 묶어 선언할 수 있으며 리스트를 집합으로 변환 가능 합니다.

>>> set('1122334455667788')

{'7', '3', '1', '2', '6', '8', '5', '4'}

 

>>> set('aabbccddeeffgg')

{'c', 'd', 'e', 'b', 'f', 'a', 'g'}

 

>>> set('AaBbCcDdEeFfGg')

{'c', 'A', 'D', 'd', 'e', 'E', 'B', 'b', 'C', 'G', 'f', 'F', 'a', 'g'}

 

>>> set("aabbccdd")

{'c', 'd', 'b', 'a'}

 

>>> ab = [1, 2, 3, 4, 5, 'a', 'b', 'c', 'd']

>>> aaa= set(ab)

>>> print(aaa)

{'c', 1, 2, 3, 4, 5, 'd', 'b', 'a'}

 

>>> d = set([1, 2, 3, 4, (5, 6), 5, 6, 7])

>>> print(d)

{1, 2, 3, 4, 5, 6, 7, (5, 6)}

 

4.3.2 집합 연산

 

- 합집합(|)


집합들의 중복 요소들을 제거하고 남은 요소들을 하나의 함수로 묶어 표현 합니다.

>>> a = set([1, 2, 3, 4, 5, 6])

>>> b = set([5, 6, 7, 8, 9])

>>> c = set([7, 8, 9, 0, 1, 2, 3])

 

>>> ab = a | b

>>> print(ab)

{1, 2, 3, 4, 5, 6, 7, 8, 9}

>>> a | b

{1, 2, 3, 4, 5, 6, 7, 8, 9}

 

>>> abc = a | b | c

>>> print(abc)

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

>>> a | b | c

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

 

- 교집합(&)


집합들에 공통으로 포함된 요소들만 추출 하여 하나의 집합으로 표현 합니다.

>>> a = set([1, 2, 3, 4, 5, 6])

>>> b = set([5, 6, 7, 8, 9])

>>> c = set([7, 8, 9, 0, 1, 2, 3])

 

>>> anb = a & b

>>> print(anb)

{5, 6}

>>> a & b

{5, 6}

 

>>> anbnc = a & b & c

>>> print(anbnc)

set()

>>> a & b & c

set()

 

- 차집합


집합에서 다른 집합과 공통된 요소를 제외하고 남은 요소 값들을 묶어 하나의 집합으로 표현 합니다.

>>> a = set([1, 2, 3, 4, 5, 6])

>>> b = set([5, 6, 7, 8, 9])

>>> c = set([7, 8, 9, 0, 1, 2, 3])

 

>>> a_b = a - b

>>> print(a_b)

{1, 2, 3, 4}

>>> a -b

{1, 2, 3, 4}

 

>>> a_b_c = a - b - c

>>> print(a_b_c)

{4}

>>> a - b - c

{4}

 

 

4.3.3 집합 함수

 

- add()


집합에 1개의 요소를 추가하는 경우에 사용 합니다.

>>> a = set([1, 2, 3, 4, 5, 6])

>>> a.add(7)

>>> print(a)

{1, 2, 3, 4, 5, 6, 7}

>>> # 1개 이상은 오류 발생

>>> a.add(7,8)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: add() takes exactly one argument (2 given)

 

- update()


집합에 2개 이상의 요소를 추가하는 경우에 사용 합니다. 기존에 존재하는 값이 있으면 추가되지않습니다.

 

>>> a = set([1, 2, 3, 4, 5, 6])

>>> a.add(7)

>>> print(a)

{1, 2, 3, 4, 5, 6, 7}

>>> a.update([7, 8, 9])

>>> print(a)

{1, 2, 3, 4, 5, 6, 7, 8, 9}

 

- remove()


함수에 존재하는 요소를 삭제하는 경우에 사용 합니다한번에 하나씩만 삭제할 수 있습니다.

>>> a = set([1, 2, 3, 4, 5, 6])

>>> a.remove(3)

>>> print(a)

{1, 2, 4, 5, 6}

 

>>> e = set([1, 2, 3, (4, 5), 4, 5])

>>> print(e)

{1, 2, 3, 4, 5, (4, 5)}

>>> e.remove((4,5))

>>> print(e)

{1, 2, 3, 4, 5}

 

- union()


합집합과 동일한 기능으로 집합들의 중복 요소들을 제거하고 남은 요소들을 하나의 함수로 묶습니다.

 

>>> a = set([1, 2, 3, 4, 5, 6])

>>> b = set([5, 6, 7, 8, 9])

>>> c = set([7, 8, 9, 0, 1, 2, 3])

>>> ab = a.union(b)

>>> print(ab)

{1, 2, 3, 4, 5, 6, 7, 8, 9}

 

>>> abc = a.union(b).union(c)

>>> print(abc)

{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

 

- intersection()


교집합과 동일한 기능으로 집합들에 공통으로 포함된 요소들만 추출 합니다.

>>> a = set([1, 2, 3, 4, 5, 6])

>>> b = set([5, 6, 7, 8, 9])

>>> c = set([7, 8, 9, 0, 1, 2, 3])

>>> 

>>> anb = a.intersection(b)

>>> print(anb)

{5, 6}

>>> anbnc = a.intersection(b).intersection(c)

>>> print(anbnc)

set()

 

- difference()


차집합과 동일한 기능으로 집합에서 다른 집합과 공통된 요소를 제외하고 남은 요소 값을 구합니다.

 

>>> a = set([1, 2, 3, 4, 5, 6])

>>> b = set([5, 6, 7, 8, 9])

>>> c = set([7, 8, 9, 0, 1, 2, 3])

 

>>> a_b = a.difference(b)

>>> print(a_b)

{1, 2, 3, 4}

>>> a_b_c = a.difference(b).difference(c)

>>> print(a_b_c)

{4}

 

- copy()

 

함수의 값을 다른 함수에 복사하는 경우 사용 합니다복사된 함수는 전혀 다른 객체입니다.

 

>>> a = set([1, 2, 3, 4, 5, 6])

>>> acopy = a.copy()

>>> print(acopy)

{1, 2, 3, 4, 5, 6}

 

>>> a.remove(3)

>>> print(acopy)

{1, 2, 3, 4, 5, 6}

>>> print(a)

{1, 2, 4, 5, 6}

 

 

4.4 딕셔너리(Dictionary)


데이터를 keyvalue의 쌍 형태로 선언하는 자료 형을 딕셔너리라고 합니다표현 방법은 keyvalue{}으로 감싸주고 쉼표(,)로 요소들을 구분해 줍니다.  입력된 요소들은 순서가 없이 보관되고 key를 이용해서만 접근이 가능 합니다. 사용할 수 있는 묶음형 자료 중 튜플은 가능하지만 set이나 list를 사용하면 오류가 발생 합니다.

단순히 keyvalue의 매칭 이므로 의미가 없는 값들로 만들 수 도 있습니다.

 

>>> a = {1: 'a', 2: 'b', 3: 'c'}

>>> b = {'a': 1, 'b': 2, 'c': 3}

>>> c = {'a': 'aaaa', 'b':'bbbb', 'c': 'cccc'}

>>> d = {1.1: 2, 2.1: 9, 0.1: 4}

>>> e = {(1, 2): 9, (4, 1): 0}

 

key가 중복되도록 선언은 할 수 있지만 기존에 선언된 값은 다음에 입력한 값으로 대체되어 마지막에 입력한 key 값을 리턴 합니다.

>>> a = {1: 2, 1: 3, 1: 9}

>>> a

{1: 9}

 

 

4.4.1 찾기


딕셔너리에 key를 대입하면 key와 조합된 value를 리턴 합니다.

>>> a = {1: 'a', 2: 'b', (4, 5): 'c'}

>>> a[1]

'a'

>>> a[(4,5)]

'c'

 

- get()을 이용하여 value를 리턴 받을 수 있습니다.


>>> a = {1: 'a', 2: 'b', (4, 5): 'c'}

>>> a.get(2)

'b'

>>> a.get((4,5))

'c'

 

 

 

4.4.2 추가


새로운 keyvalue를 대입하여 신규 쌍을 추가 할 수 있습니다.

>>> a = {1: 'a', 2: 'b', (4, 5): 'c'}

>>> a[3] = 'ddd'

>>> a['no'] = 1

>>> a

{1: 'a', 2: 'b', (4, 5): 'c', 3: 'ddd', 'no': 1}

 

 

4.4.3 수정


추가하는 방법과 동일하게 key를 이용하여 새로운 value를 입력하면 수정할 수 있습니다. 사실 이건 수정이라기 보다는 딕셔너리가 중복을 허용하지 않고 동일한 key에 대해서는 나중에 입력한 값으로 덮어쓰는 기능을 이용하는 것 입니다.

>>> a = {1: 'a', 2: 'b', (4, 5): 'c'}

>>> a[1] = 'aaaa'

>>> a

{1: 'aaaa', 2: 'b', (4, 5): 'c'}

 

 

4.4.4 삭제


del을 이용하여 하나의 요소 쌍을 삭제 할 수 있습니다.

>>> a = {1: 'a', 2: 'b', (4, 5): 'c'}

>>> del a[2]

>>> a

{1: 'a', (4, 5): 'c'}

>>> del a[(4,5)]

>>> a

{1: 'a'}

 

 

4.4.5 함수

 

- keys()


딕셔너리의 key에 해당하는 요소들을 추출해서 dict_keys()에 담아 리턴 합니다.

>>> a = {1: 'a', 2: 'b', (4, 5): 'c'}

>>> a.keys()

dict_keys([1, 2, (4, 5)])

 

- values()


딕셔너리의 value에 해당하는 요소들을 추출해서 dict_values()에 담아 리턴 합니다.

>>> a = {1: 'a', 2: 'b', (4, 5): 'c'}

>>> a.values()

dict_values(['a', 'b', 'c'])

 

- items()


딕셔너리의 요소들을 dict_items()에 담아 리턴 합니다.

>>> a = {1: 'a', 2: 'b', (4, 5): 'c'}

>>> a.items()

dict_items([(1, 'a'), (2, 'b'), ((4, 5), 'c')])

 

- copy()


새로운 변수를 생성해서 딕셔너리를 복사합니다.

>>> a = {1: 'a', 2: 'b', (4, 5): 'c', 3: 'ddd', 'no': 1}

>>> b = a.copy()

>>> b

{1: 'a', 2: 'b', (4, 5): 'c', 3: 'ddd', 'no': 1}

 

- clear()


딕셔너리에 있는 모든 요소들을 삭제 합니다.

>>> a = {1: 'a', 2: 'b', (4, 5): 'c'}

>>> a.clear()

{}


- copy coding -


4. 자료구조(집합, 리스트, 튜플)

 

4.1 리스트


4.1.1 리스트 만들기


단순히 1개의 숫자, 1개의 문자, 1개의 문자열일 수도 있지만 그보다는 숫자들의 집합, 문자들의 집합을 하나로 묶어놓은 변수의 개념입니다.

>>> one = [1]

>>> a = [1, 2, 3, 4, 5]

>>> b = ['a', 'b', 'c', 'd']

>>> ab = [1, 2, 3, 4, 5, 'a', 'b', 'c', 'd']

>>> c = [1, 2, 'apple', 'banana']

>>> d = [1, 2, [3, 4], ['apple', 'banana'], True, False]

 

이런 방식으로 꼭 동일한 자료형 으로 리스트를 표현하지 않고 여러 자료형을 혼합되어 생성 하거나 리스트에 리스트를 포함하여 사용 가능 합니다.

리스트에 리스트를 요소로 추가해서 표현도 가능 합니다.

>>> a = [1, 2, 3, 4, 5]

>>> b = ['a', 'b', 'c', 'd']

>>> ab = [a, b]

>>> print(ab)

[[1, 2, 3, 4, 5], ['a', 'b', 'c', 'd']]

 

 

4.1.2 리스트 인텍싱


4.1.2.1 리스트 값 꺼내기


리스트에 들어있는 각각의 값들을 구별해 사용하기 위하여 첫 번째, 두 번째, 세 번째이런식으로 번호를 부여해야 하는데 이것을 인덱싱이라고 하며 0부터 시작을 합니다, 첫 번째가 0, 두 번째가 1… 이렇게 순서가 정해 집니다.

d = [1, 2, [3, 4], ['apple', 'banana']]

여기에서 d[0] 1, d[1] 2가 되며 리스트에 리스트가 포함되어도 하나의 요소로 처리 됩니다..

d[-1]은 맨 마지막 값인 [“apple”, “banana”]으로 d[3]과 동일 합니다.

그럼 apple을 가리키려면 어떻게 해야 할까요? d3번째 요소에서 또다시 첫 번째인 d[3][0] 또는 d의 맨 마지막 요소 내의 첫 번째인 d[-1][0] 하면 됩니다.

 

>>> d = [1, 2, [3, 4], ['apple', 'banana']]

>>> print(d[0], d[1], d[-1], d[3][0], d[-1][0])

1 2 ['apple', 'banana'] apple apple

 

 

4.1.2.2 리스트 값 추가


- append()


리스트에 값을 추가하려면 append()를 이용하여 값을 정해주면 됩니다.

d.append(6) 이렇게 하면 d의 맨 마지막에 6이 추가 되고 d.append(['a','b']) 하면 새로운 리스트 [‘a’, ‘b’]가 마지막에 추가 됩니다.

 

>>> d = [1, 2, [3, 4], ['apple', 'banana']]

>>> print(d[0], d[1], d[-1], d[3][0], d[-1][0])

1 2 ['apple', 'banana'] apple apple

>>> d = [1, 2, [3, 4], ['apple', 'banana']]

>>> d.append(6)

>>> print(d)

[1, 2, [3, 4], ['apple', 'banana'], 6]

>>> d.append(['a','b'])

>>> print(d)

[1, 2, [3, 4], ['apple', 'banana'], 6, ['a', 'b']]

 

 - 덧셈


덧셈 기호를 이용하여 리스트에 리스트를 더하여 정의 할 수 있습니다.

 

>>> a = ['apple', 'banana']

>>> a = a + a

>>> 

>>> print(a)

['apple', 'banana', 'apple', 'banana']

>>> b = [1, 2, 3, 4]

>>> a = a + b

>>> print(a)

['apple', 'banana', 'apple', 'banana', 1, 2, 3, 4]

 


- 곱셈


곱셈 기호를 이용하여 리스트에 상수를 곱하여 정의 할 수 있습니다곱하는 정수 만큼 리스트가 복제 되어 추가 됩니다.

 

>>> a = ['apple', 'banana']

>>> a = a * 3

>>> print(a)

['apple', 'banana', 'apple', 'banana', 'apple', 'banana']

 

 

- insert()를 이용 중간에 추가


insert(index, value)를 이용하여 리스트의 원하는 위치에 값을 추가 할 수 있습니다. 파라미터로 index는 추가할 리스트 요소의 순서를 말하고 value는 그 위치에 삽입할 값입니다.

리스트의 두 번째 요소(index 1) 위치에 값을 삽입해 보겠습니다.

 

>>> d = [1, 2, [3, 4], ['apple', 'banana']]

>>> d.insert(1, ["b", "c"])

>>> print(d)

[1, ['b', 'c'], 2, [3, 4], ['apple', 'banana']]


python study

 

 

4.1.2.3 리스트 값 변경

                

리스트 내의 값을 변경 하려면 인덱스를 사용 하면 됩니다.

리스트 dd = [1, 2, [3, 4], ['apple', 'banana'], 6, ['a', 'b']] 와 같이 선언 하였을 때 d[1] = 7은 인덱스 값이 1인 요소의 값을 7로 변경 하고 d[-1] = 9하면 리스트의 마지막에 있는 리스트 [‘a’, ‘b’] 9로 변경 됩니다.

리스트 내부에 있는 리스트의 값을 변경 하는 경우 d[3][0] = "orange"하면 ‘app’e’‘orange’로 변경 됩니다.

 

>>> d = [1, 2, [3, 4], ['apple', 'banana'], 6, ['a', 'b']]

>>> d[1] = 7

>>> print(d)

[1, 7, [3, 4], ['apple', 'banana'], 6, ['a', 'b']]

>>> d[-1] = 9

>>> print(d)

[1, 7, [3, 4], ['apple', 'banana'], 6, 9]

>>> d[3][0] = "orange"

>>> print(d)

[1, 7, [3, 4], ['orange', 'banana'], 6, 9]

 

 

4.1.2.4 리스트 값 삭제


- del


리스트 항목의 삭제는 del 명령을 이용 합니다. del d[1] 하면 리스트의 index값이 1인 두 번째에 있는 요소가 삭제 됩니다.

 

>>> d = [1, 7, [3, 4], ['orange', 'banana'], 6, 9]

>>> del d[1]

>>> print(d)

[1, [3, 4], ['orange', 'banana'], 6, 9]

 

 

- remove()


리스트에서 index의 위치가 아닌 값을 찾아서 삭제하는 방법은 remove()를 사용 합니다.  remove(value)에서 value는 삭제하려는 값을 입력하면 리스트 index 순으로 제일 처음에 나오는 값을 찾아서 삭제 합니다.

 

>>> c = [1, 2, 3, [1, 2, 3], 1, 2, 3]

>>> c.remove(3)

>>> print(c)

[1, 2, [1, 2, 3], 1, 2, 3]

>>> c.remove(3)

>>> print(c)

[1, 2, [1, 2, 3], 1, 2]

 

리스트 내부에 있는 3의 값은 삭제가 되지 않고 마지막 3이 삭제 되었습니다리스트 내부의 리스트에 있는 값을 삭제하려면 리스트위치의 인덱스에서 다시 한번 인덱스를 사용합니다.

 

>>> print(c)

[1, 2, [1, 2, 3], 1, 2]

>>> c[2].remove(3)

>>> print(c)

[1, 2, [1, 2], 1, 2]

 

 

4.1.2.5 기타 기능


- len()


len()을 이용하여 리스트의 길이를 구합니다. len(list )으로 사용하며 전체 index 값을 반환 하며리스트내의 리스트도 1개로 계산합니다.

 

>>> c = [1, 2, 3, [1, 2, 3], 1, 2, 3]

>>> cnt = len(c)

>>> print(cnt)

7

>>> len(c)

7

  

 

- index()


index()를 이용하면 리스트 내부의 값에 해당하는 인덱스를 구할 수 있습니다. index(value)value에 찾으려는 값을 넣어주면 index를 반환합니다리스트 내부의 리스트를 찾는 경우에도 valuelist를 넣어주면 인덱스가 반환 됩니다.

 

>>> c = [1, 2, 3, [1, 2, 3], 1, 2, 3]

>>> c.index(3)

2

>>> c.index([1,2,3])

3

 

 

- pop()


리스트의 마지막 값을 꺼내고 그 마지막 값을 삭제하는 경우 pop()을 사용합니다.

 

>>> c = [1, 2, 3, [1, 2, 3], 1, 2, 3]

>>> c.pop()

3

>>> print(c)

[1, 2, 3, [1, 2, 3], 1, 2]

 

 

pop(index)를 사용하면 index 값을 이용하여 꺼내올 요소의 위치를 정하고 그 요소 삭제 할 수 있습니다. 중간에 있는 리스트[1, 2, 3]을 꺼내고 삭제해 보겠습니다.

 

>>> c = [1, 2, 3, [1, 2, 3], 1, 2, 3]

>>> c.pop(3)

[1, 2, 3]

>>> print(c)

[1, 2, 3, 1, 2, 3]

 

 

- reverse()


리스트 내부의 index 순서를 반대로 뒤집어 값이 역순으로 재배열 됩니다.

 

>>> c = [1, 2, 3, [1, 2, 3], 1, 2, 3]

>>> print(c[0])

1

>>> c.reverse()

>>> print(c)

[3, 2, 1, [1, 2, 3], 3, 2, 1]

>>> print(c[0])

3

 

리스트 내부의 리스트 요소 값들은 변경되지 않습니다. 이걸 뒤집으려면 인덱스를 사용해야 합니다.

 

>>> print(c)

[3, 2, 1, [1, 2, 3], 3, 2, 1]

>>> c[3].reverse()

>>> print(c)

[3, 2, 1, [3, 2, 1], 3, 2, 1]

 

- sort()


리스트의 값들을 오름차 순으로 정렬해 줍니다. 동일한 자료형만 처리가 가능 합니다.

 

>>> c = [5, 2, 7, 1, 9, 3, 4]

>>> c.sort()

>>> print(c)

[1, 2, 3, 4, 5, 7, 9]

>>> a = ['a','z','c']

>>> a.sort()

>>> print(a)

['a', 'c', 'z']

 

 

- 슬라이싱


리스트의 index를 이용하여 필요한 부분 만큼 값을 뽑아오는 방법입니다.

a[1:3] : index 값이 1보다 크거나 같고 3 미만(1<= a[index] < 3)

a[:3] : index 값이 처음부터 3 미만( a[index] < 3)

a[3:] : index 값이 3보다 크거나 같은 값(3 <= a[index])

 

>>> a = [1, 2, 3, 4, 5, 6, 7]

>>> print(a[1:3])

[2, 3]

>>> print(a[:3])

[1, 2, 3]

>>> print(a[3:])

[4, 5, 6, 7]


- copy coding -


12345

+ Recent posts