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
는 튜플( )
과 조합하여 다양한 방식으로 사용할 수 있다.
-
%
연산자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가지 차이가 있다.-
데이터를 삽입하고 싶은 곳에
%d
등의 형식 대신{ }
을 사용 -
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")
여기까지 데이터형과 데이터 구조를 정리해보았다.
다음 챕터에서는 프로그래밍 언어의 꽃~~(개인적인 생각입니다)~~인 제어문에 대해 정리할 예정이다.
(다음 글에서 계속됩니다.)