티스토리 뷰

10.8 함수에서 리스트 반환하기(Returning a List from a Function)

- 함수가 리스트를 반환 할 때, 반환하는 리스트의 주소값(reference value)이 반환된다.

- 함수를 호출 할 때, 리스트 인자를 넘겨 줄 수 있다.

- 그리고 함수는 리스트 반환도 가능하다.

- 예를 들어, 아래의 함수는 넘겨받은 리스트의 요소들을 역순으로 배열한 리스트를 반환하는 함수이다.

 

*revers(lst)

1
2
3
4
5
6
7
def revers(lst):
    result = []
 
    for element in lst:
        result.insert(0, element)
 
    return result
cs

 

- Line 2에서 result라는 새로운 리스트를 생성한다.

- Line 4-5 에서, lst라는 리스트의 요소들을 복사하여 result 리스트에 넣는다.

- Line 7에서 result 리스트를 반환한다.

- 위 함수를 아래와 같이 사용하면 list2 = [6,5,4,3,2,1] 리스트가 생성된다.

list1 = [1, 2, 3, 4, 5, 6]

list2 = reverse(list1)

 

- 하지만 list 클래스reverse() 메소드가 있다는 걸 잊지말자.

 

10.9 사례 연구: 문자 빈도수 세기(Case Study: Counting the Occurrences of Each Letter)

- 100개의 문자들 각각의 나타나는 빈도 수를 카운트하는 프로그램이다.

 

1. 100개의 소문자를 랜덤으로 만들어 chars라는 리스트에 할당한다.

* 랜덤 문자들은 6.11 RandomCharacter 모듈의 getRandomLowerCaseLetter() 함수를 이용해 얻을 예정이다.

2. 각 문자를 카운트하기 위해 counts라는 이름의 26개의 int 값을 가지는 리스트를 선언한다.

* 리스트의 각 자리는 문자가 나타나는 수를 할당하는 곳이다. ex) counts[0]은 a의 빈도수이고 counts[1]은 b의 빈도수이다.

 

 *RandomCharacter.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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))
cs

 

*CountLettersInList.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import RandomCharacter
 
def main():
    #문자들이 있는 리스트 생성
    chars = createList()
 
    #리스트 출력
    print("The lowercase letters are: ")
    displayList(chars)
 
    #각 문자의 빈도수 세기
    counts = countLetters(chars)
 
    #counts 리스트 출력
    print("The occurences of each letter are : ")
    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 = ' ')
 
#각 문자 빈도수 세기
def countLetters(chars):
    # 26개의 정수를 0으로 초기화한 리스트 생성
    counts = 26*[0]
 
    #문자 수 세기
    for i in range(len(chars)):
        counts[ord(chars[i]) - ord('a')] += 1
 
    return counts
 
#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()
cs

 

<실행 결과>

 

참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.


교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다. 

댓글