Back
Featured image of post 데이터형과 데이터 구조 (3)

데이터형과 데이터 구조 (3)

관련 함수, 주석, 줄바꿈

7. 관련 함수들

len

리스트나 튜플 내의 요소 개수를 반환하는 함수이다.

>>> len(['a', 'b', 'c', 'd'])
4
>>> len([2, 3, 5, 7, 11, 13])
6

대상 요소가 무엇이든 전체 개수만 반환하므로, 2차원 이상의 리스트 혹은 튜플의 경우에는 다음과 같은 결과를 확인할 수 있다.

>>> fibonacci = [[1, 1, 2, 3, 5, 8], [13, 21, 34, 55, 89], [144, 233, 377, 610, 987]]
>>> len(fibonacci)
3
>>> len(fibonacci[2])
5

copy

리스트를 복제하는 (리스트) 메소드이다.

C에서는 Shallow copy(얕은 복사)와 Deep copy(깊은 복사)를 구별한다. C에서는 특히 Dangling pointer의 발생을 방지하려면 이 둘의 차이에 대해 잘 이해해야 하는데, 파이썬에도 이 둘의 차이를 구분한다.

그냥 대입하는 방식으로 리스트를 복사하면 얕은 복사가 일어난다. 다음 코드를 보면 문제가 있음을 알 수 있다.

>>> a = [1, 2, 3]
>>> b = a
>>> a[2] = 9
>>> a
[1, 2, 9]
>>> b
[1, 2, 9]

같은 리스트를 참조하기 때문에 이와 같은 문제가 발생한다. C에서는 직접 또다른 메모리 공간을 할당받는 등의 방법을 사용하지만, 파이썬에서는 copy 함수로 이와 같은 문제를 해결한다.

>>> a = [1, 2, 3]
>>> b = a.copy()
>>> a[2] = 9
>>> a
[1, 2, 9]
>>> b
[1, 2, 3]

이를 통해 copy 메소드는 서로 다른 리스트를 참조하도록 만들 수 있고, 얕은 복사가 아닌 깊은 복사가 수행 가능함을 알 수 있다.

리스트를 복제하고 싶을 때 copy 메소드를 사용할 수 있다.

단, 튜플은 값을 변경할 수 없으므로 copy 메소드를 사용할 수 없다.

in

어떠한 값이 리스트나 퓨틀 내에 존재하는지 확인하기 위한 함수이다.

>>> subjects = ("Korean", "English", "Math", "Science")
>>> "Math" in subjects
True
>>> "Music" in subjects
False

알고 싶은 값 in 리스트(or 튜플) 의 형태로 사용한다. 값이 포함되어 있으면 True, 그렇지 않으면 False가 반환된다.

index

in함수는 단순히 포함 여부를 확인할 수 있다면, index 메소드는 요소의 위치를 알려 준다.

>>> weekdays = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
>>> weekdays.index("Tue")
1
>>> weekdays.index("Fri")
4

요소를 찾을 수 없는 경우에는 에러가 발생한다.

sort vs sorted

  • sorted

    sorted는 함수이다. 인수로 주어진 리스트나 튜플을 정렬한 후 복사본을 반환한다.

    원래 리스트의 요소 순서는 변하지 않는다.

  • sort

    sort는 (리스트) 메소드이다. 해당 리스트를 정렬하고, 반환 값은 없다.

    즉, 해당 리스트의 요소들이 실제로 순서가 바뀌어 정렬된다.

print

print는 인수로 주어진 정보를 콘솔에 출력하는 함수이다.

콘솔 출력 함수인 print는 튜플( )과 조합하여 다양한 방식으로 사용할 수 있다.

  • % 연산자

    C에서는 printf() 함수 내에 1번째 매개변수로 형식지정자(ex. 정수 %d, 문자 %c, 실수 %f)를 포함하는 문자열을 넣고, 2번째 매개변수로 각 형식지정자에 해당하는 변수를 ,로 구분하여 입력한다.

    파이썬에서는 문자열 내에 %s(문자열 형식), %d(정수형) 등의 서식을 삽입하고, 해당 문자열 뒤에 % 연산자, 그리고 그 뒤에 튜플 형식으로 출력할 데이터를 배치한다.

    문자열 지정 형식은 C와 거의 동일하다.

    문자열 10진수 16진수 부동소수
    %s %d %x %f
    >>> print("제 이름은 %s입니다. 저는 %dcm입니다." % ("홍길동", 185))
    "제 이름은 홍길동입니다. 저는 185cm입니다."
    

    당연하지만 사전에 튜플을 선언하고 사용할 수도 있다. (오히려 이 경우가 좀 더 일반적인 것 같다.)

    >>> score = (96, 88)
    >>> print("수학 : %d점, 영어 : %d점" % score)
    "수학 : 96점, 영어 : 88점"
    

    지정 형식과 다른 데이터형을 입력하는 경우 에러가 발생하므로 형식 지정 및 값 입력 시에 주의를 요한다.

  • .format() 메소드

    % 연산자를 사용하는 방식과 비교하면 기본적으로 2가지 차이가 있다.

    1. 데이터를 삽입하고 싶은 곳에 %d등의 형식 대신 { }을 사용

    2. print에 인수(매개변수)로 전달하는 대신 해당 자료형의 메소드 형태로 호출

    % 연산자와 비교하면 다음과 같다.

    >>> score = (96, 88)
    >>> print("수학 : {}점, 영어 : {}점".format(score[0], score[1]))
    "수학 : 96점, 영어 : 88점"
    

    그러나 { }내에 번호를 지정하거나 이름을 붙이는 방식으로도 사용할 수 있다!

    >>> print("수학 : {1}점, 영어 : {0}점".format(96, 88))
    "수학 : 88점, 영어 : 96점"
    >>> print("수학 : {수학}점, 영어 : {영어}점".format(수학 = 96, 영어 = 88))
    "수학 : 96점, 영어 : 88점"
    

    이 밖에도 C에서와 유사하게 서식 문자열을 사용해 자릿수 지정, 좌/우 정렬, 패딩을 주는 등의 다양한 서식 지정 등이 가능하다(고 한다).

8. 주석(Comment)

다른 수많은 언어에서도 사용되는 개념으로, 간단하게 말하면 프로그램에 관한 개발자의 메모이다.

python에서는 기본적으로 1행짜리 주석만 지원한다.

# 이 행은 주석입니다.
# 이 행도 주석입니다.

그러나 여러 행에 걸친 문자열 ''' ''' 또는 """ """기호를 개행과 함께 사용해 여러 행 주석을 작성할 수도 있다.

"""
여기부터 주석으로 볼 수 있습니다.
이 행도 주석이라고 볼 수 있고,
원한다면 계속 주석을 작성할 수 있습니다.
"""

그러나 이는 여러 행에 걸쳐 문자열을 작성하는 방법으로, 정석적인 사용 방식은 아니다.

9. 줄바꿈

코드를 작성하다보면 필요 이상으로 길어질 수도 있다.

이러한 경우 백슬래시 \를 사용해 코드를 여러 줄에 걸쳐 작성 가능하다.

this_is_test_variable = test < 0 or \
						real > 0 or \
    					just_test == 1

리스트나 튜플, 딕셔너리의 요소를 구분하기 위한 개행은 백슬래시를 삽입하지 않아도 된다.

weekdays = ("Mon",
            "Tue",
            "Wed",
            "Thu",
            "Fri",
            "Sat",
            "Sun")

여기까지 데이터형과 데이터 구조를 정리해보았다.

다음 챕터에서는 프로그래밍 언어의 꽃~~(개인적인 생각입니다)~~인 제어문에 대해 정리할 예정이다.

(다음 글에서 계속됩니다.)

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus