Language/Python

Phython study - 2nd day

아르비스 2014. 4. 22. 10:41

python_logo.png



1. 자료형(Data Type)은 무엇인가?


이번 편에서는 자료형(Data Type)에 대해서 알아보도록 하겠습니다. 자료형은 말 그대로, 데이터의 형식을 말합니다. 파이썬에서는 수치 자료형부터 시작해서 문자 자료형, 튜플, 리스트, 사전 등 여러가지의 자료형이 존재하며, 자료형을 보고서 데이터가 어떠한 데이터의 형식인지 알 수 있습니다. 파이썬에 내장되어 있는 함수인 type이란 함수를 통해서 객체의 타입을 살펴보도록 하겠습니다. 이 type이란 함수는 객체의 타입을 보여주며, 아래와 같이 사용합니다.

1
2
3
4
5
6
7
8
>>> type(33)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type(['1', '2', '3'])
<class 'list'>
>>> type(33331491491492)
<class 'int'>

위를 보시면 객체 33의 타입은 int로, 이는 정수(integer)를 의미합니다. 객체 3.14는 float이므로 실수(float)를 의미합니다. 그 아래에 있는 대괄호로 감싸진 녀석은 리스트라는 녀석인데, 이 리스트란 개념은 좀 더 뒤에가서 설명합니다. 아직은 이것이 무엇인지 아실 필요는 없습니다. 수치 자료형, 문자 자료형, 리스트, 튜플, 사전 이런 식으로 차례대로 설명을 할 계획이며, 우선은 숫자를 나타내는 수치 자료형(Numeric Data Type)에 대해서 알아보도록 합시다.


2. 정수(Integer)


위에서 말한대로 파이썬에서 등장하는 int라는 녀석은 정수(Integer)의 약자입니다. 아래에 변수에 대입이 되는 객체들은 모두 정수형 객체이며, 그 중에서도 가장 많이 쓰이는 10진수의 예입니다.

1
2
3
4
>>> A = 5
>>> B = 10
>>> print(A, B)
5 10

정수를 10진수가 아닌 2진수, 8진수, 16진수로 인식하게 하고 싶으면 정수 앞에 각각 '0b', '0o', '0x'를 붙이시면 됩니다. 아래와 같이 말입니다.

1
2
>>> print(0b10, 0o10, 0x10)
2 8 16

위에서 b는 2진수(binary), o는 8진수(octal), x는 16진수(hexadecimal)라는 의미입니다. 반대로 10진수를 각각 2진수, 8진수, 16진수의 형태로 변환하려면 bin, oct, hex 함수를 사용하시면 됩니다.

1
2
3
4
5
6
>>> bin(202020)
'0b110001010100100100'
>>> oct(20114)
'0o47222'
>>> hex(401000)
'0x61e68'

여기서 주의하셔야 할 부분은, 위에 보시면 출력되는 결과가 정수가 아니라 문자열이라는 것입니다. 즉, 'hex(40) - 20'과 같은 연산에서 hex(40)이 내보내는 결과는 문자열(string), 20은 정수(integer)이니 타입이 맞지 않아 서로 연산을 하지 못합니다. 문자열에 대해서는 다음 편인 문자열 강좌에서 다루니 궁금하신 분은 미리 살펴보고 오셔도 괜찮습니다.


3. 실수(Float)


파이썬에서 등장하는 float라는 녀석은 부동 소수점(Floating point)의 약자이며, 부동 소수점이란 정수처럼 소숫점이 고정되어 있는게 아니라 부동이란 의미 그대로 고정되어 있지 않고 움직인다는 말입니다. 이 방식은 컴퓨터에서 실수를 표현하는 방식이며, 소숫점의 위치를 나타내는 수를 따로 기록합니다. 앞으로 float라는 단어가 나오면, 이는 부동 소수점이 아니라 실수라는 의미로 설명하도록 하겠습니다. 아래의 예제에서 변수에 대입되는 객체는 모두 실수 형태의 객체라고 말할 수 있습니다.

1
2
3
4
>>> A = 3.14
>>> B = 5.1402020319
>>> print(A, B)
3.14 5.1402020319

위처럼 실수를 표현하는 방식도 있겠지만, 다른 방식으로는 지수 표기법이라는 것으로 아래와 같이 실수를 표현하는 방식이 존재합니다.

1
2
3
4
>>> 0.23193202032E8
23193202.032
>>> 1412232.22E-10
0.000141223222

위 코드에서 E는 지수(Exponent)라는 의미이며, 대문자가 아니더라도 소문자 역시 똑같은 의미로 사용됩니다. 위의 예제에서 0.23193202032E8는 0.23193202032 * 10^8이라고 보시면 됩니다. 여기서 10^n은 10의 n승이라는 것입니다. 즉, 0.23193202032 곱하기 10의 8승은 23193202.032라는 값을 지니고, 1412232.22E-10에서는 10^-10이니 이것은 1412232.22 곱하기 10의 마이너스 10승을 의미하며, 0.000141223222라는 값을 가집니다.


4. 복소수(Complex)


파이썬에선 정수와 실수뿐만 아니라 좀더 넓은 개념인 복소수까지도 내부적으로 지원합니다. 여기서 주의하셔야 할 부분은 허수 단위가 i가 아니라 j 또는 J라는 것입니다. 우선은 아래의 예제를 보도록 합시다.

1
2
3
4
5
6
7
8
9
>>> x = 7 - 3j
>>> type(x)
<class 'complex'>
>>> x.imag
-3.0
>>> x.real
7.0
>>> x.conjugate()
(7+3j)

위 예제에서 imag는 복소수의 허수 부분을 돌려주고, real은 복소수의 실수 부분을 되돌려줍니다. 그리고 conjugate 함수는 복소수의 켤레 복소수를 되돌려줍니다. 물론 정수와 같이 복소수 끼리도 연산이 가능합니다. 복소수가 아직 뭔지 모르시는 분들은 복소수를 따로 보고 오셔도 되고, 아니면 파이썬에도 이런게 있구나 하고 그냥 넘어가셔도 됩니다.




5. 문자열(String)


이번에 알아볼 자료형은 문자열(String)이며, 문자열은 문자들의 모임, 문자를 나열한 것을 문자열이라고 합니다. 'a', 'b', 'c' 등과 같은건 문자라고 할 수 있지만 "abc"와 같이 문자들이 모이게 되면 이것을 문자열이라고 할 수 있습니다. 파이썬에서 문자열은 단일 인용부호(')나 이중 인용부호(")로 감싸주어 표현합니다. 주의하실 점은, 감싸줄 때는 단일 인용부호로 시작했으면 단일 인용부호로 끝나야 하며, 이중 인용부호로 시작했으면 이중 인용부호로 끝나야만 한다는 것을 기억하시기 바랍니다. 아래의 예는 모두 문자열이라고 할 수 있습니다.

1
2
3
4
5
6
>>> type("ABCDEFGHI")
<class 'str'>
>>> type('ABC')
<class 'str'>
>>> type("1301##")
<class 'str'>

그리고 파이썬에서는 위 방법뿐만 아니라 두가지 방법이 더 존재하는데, 이는 단일 인용부호나 이중 인용부호를 연속으로 세 번 연속으로쓴 """와 '''가 있습니다. 이런 연속된 인용부호를 쓰게되면 간단하게 여러 줄의 문자열을 변수에 대입하거나 출력할 수 있습니다. 아래의 예제를 한번 보도록 합시다.

1
2
3
4
5
6
7
8
9
>>> print("""
ABCDEFGHIJKL
0123456789
!@#$%^&*
""")
ABCDEFGHIJKL
0123456789
!@#$%^&*

위 예제를 보시면 연속된 인용부호의 사용은 여러 줄의 문자열을 보다 쉽게 출력하는 것을 가능하게 합니다. 단일 혹은 이중 인용부호의 사용으로 여러 줄의 문자열을 나타내게 하려면 이스케이프 문자를 사용하여야만 합니다. 여기서 이스케이프 문자란 별도의 기능을 제공하는 특수한 문자로 앞에 역슬래시(\)가 있습니다. 아래의 표는 주로 쓰이는 이스케이프 문자를 정리해둔 것입니다.


이스케이프 문자

설명

\n

개행(Newline, 줄바꿈)

\t

탭(Tab)

\0

NULL 문자

\\

문자 '\'

\'

단일 인용부호(')

\"

이중 인용부호(")


위 표에 정리된 이스케이프 문자를 한번 사용하여 보도록 합시다. 아래 예제에서는 개행 문자와 탭 문자를 사용했습니다.

1
2
3
>>> print("AAA\nB\tCDE")
AAA
B CDE

결과를 보시면 AAA 바로 다음에 개행이 되고, B 다음에 탭 문자가 삽입된 것을 보실 수 있습니다. 만약에 역슬래시를 출력하려면, 위 표에 나온대로 역슬래시를 연속으로 두번을 써야 하는데 이는 역슬래시가 단독으로 쓰이면 이스케이프 문자로 인식하기 때문에, 아래와 같이 역슬래시를 두번 사용함으로 하나의 역슬래시를 출력할 수 있습니다.

1
2
>>> print("C:\\ABC.txt")
C:\ABC.txt

그리고 이중 인용부호(")나 단일 인용부호(')로 묶은 문자열 안에 "나 '를 포함하고 싶은 경우에는 앞에다 역슬래시(\)를 붙이거나, 이중 인용부호로 묶은 문자열 내에서 단일 인용부호를 사용하거나, 단일 인용부호로 묶은 문자열 내에서 이중 인용부호를 사용하면 됩니다. 아래와 같이 말입니다.

1
2
3
4
5
6
7
8
>>> print("\"It's all prepared. All I need to is move forward!\"")
"It's all prepared. All I need to is move forward!"
>>> print('"Try your best rather than be the best."')
"Try your best rather than be the best."
>>> print("'I determine my future all by myself.'")
'I determine my future all by myself.'
>>> print('\'Think different!\'')
'Think different!'

6. 문자열 연산(String operation)


파이썬에서는 문자열에 관련된 연산자들도 지원하고 있는데, 이 중에서 + 연산자는 문자열을 서로 연결하는 기능을 하며, * 연산자는 문자열을 반복하는 기능을 합니다.

1
2
3
4
5
6
>>> "012" "3456789"
'0123456789'
>>> "ABC" + "DEFGHI"
'ABCDEFGHI'
>>> "Python!" * 3
'Python!Python!Python!'

위 예제의 첫줄에 적힌 코드에서는 + 연산자가 없어도 문자열이 서로 연결된 것을 보실 수 있습니다. 이는 값이 고정되어 있는 문자열 상수 끼리는 + 연산자를 생략할 수 있기 때문입니다. 그리고 세번째 줄에 쓰인 + 연산자는 "ABC"와 "DEFGHI"를 서로 연결하여 "ABCDEFGHI"를 만들어 냅니다. 다섯번째 줄에 쓰인 * 연산자는 "Python!"을 3번 반복하는 기능을 하여 "Python!Python!Python!"를 만들어 내는 것입니다.


7. 인덱싱(Indexing)


파이썬에서는 문자열에서 원하는 위치에 있는 문자를 마음대로 꺼낼 수 있는데 이를 인덱싱(Indexing)이라 합니다. 변수 뒤에 가져오려는 문자의 위치를 적고, 그 위치를 대괄호로 감싸면 되며, 즉 '변수[위치]'와 같은 형태입니다. 대괄호 안에 들어가는 수를 위치, 첨자, 인덱스라고도 하며 이 위치는 1이 아닌 0부터 시작합니다. 예를 들어서 "python is very powerful"와 같은 문자열이 있다면, 각 문자의 위치는 아래 그림과 같습니다.

K-4.png



위 그림에서 예를 들어, 위치 4에 해당하는 문자는 'o', 위치 11에 해당하는 문자는 'e'입니다. 이를 직접 인덱싱하여 예상하던 결과가 맞는지 비교해보도록 합시다. 아래의 예제를 우선 봅시다.

1
2
3
4
5
6
7
8
9
>>> var = "python is very powerful"
>>> var[4]
'o'
>>> var[11]
'e'
>>> var[0]
'p'
>>> var[1]
'y'

위 코드의 결과를 보시니 우리가 생각하던 결과와 일치하죠? 그럼 위치에 음수가 들어가는 경우는 어떤 결과가 나올 것 같나요? 위치에 음수가 쓰이면 앞에서 부터가 아닌 뒤에서부터 문자열을 읽게 됩니다.


K-5.png


위 그림에서 예를 들면, 위치 -2에 해당하는 문자는 'u', 위치 -10에 해당하는 문자는 'y', 위치 -16에 해당하는 문자는 'i'일 것입니다. 이를 직접 인덱싱하여 예상하던 결과가 맞는지 비교해보도록 합시다. 아래의 예제를 봅시다.

1
2
3
4
5
6
7
>>> var = "python is very powerful"
>>> var[-2]
'u'
>>> var[-10]
'y'
>>> var[-16]
'i'

위 코드의 결과와 예상했던 결과가 일치함을 알 수 있습니다. 주의하실 점은 아래와 같이 인덱싱을 통해 문자열의 일부를 수정하려고 하면 에러가 발생합니다. 인덱싱을 통해서 문자열을 변경하는 행위는 허용되지 않는다는 의미입니다.

1
2
3
4
5
6
>>> var = "ABCDE"
>>> var[2] = 'G'
Traceback (most recent call last):
File "<pyshell#66>", line 1, in <module>
var[2] = 'G'
TypeError: 'str' object does not support item assignment


8. 슬라이싱(Slicing)


우리가 전에 알아본 인덱싱(indexing)이 원하는 위치에 있는 문자를 가져올 수 있는 것이라면, 이번에 배울 슬라이싱(Slicing)을 통해 문자열을 통채로 꺼낼 수 있습니다. 슬라이싱이라는 단어만 보고도 케이크를 자르듯 문자열을 조각조각 썰어버릴 것 같은 느낌이 들지 않나요? 쉽게 말하면 슬라이싱을 통해서 문자열을 조각내어 일부만 가져온다고 할 수 있습니다. 슬라이싱은 '변수[시작 위치:끝 위치]'와 같이 사용하며, 이는 시작 위치부터 시작해서 끝 위치 까지의 문자열을 가져온다는 것입니다.


K-6.png



위의 그림처럼 위치 2~5에 있는 문자열의 일부를 가져오고 싶다면 [2:5]라고 써야한다고 생각하겠지만, 끝 번호에 해당하는 문자는 포함이 되지 않습니다. 즉, 위 그림의 문자열을 가져오려면 [2:6]라고 써야합니다. 상당히 혼동이 오실지도 모르겠는데, 여러번 사용하다 보면 적응되니 걱정하지 않으셔도 될 듯 합니다. 우선 한번 사용해보도록 합시다.

1
2
3
4
5
6
7
>>> var = "python is best language ever"
>>> var[2:6]
'thon'
>>> var[3:7]
'hon '
>>> var[0:15]
'python is best '

위 코드에서 [2:6]은 위치 2에서 위치 5까지의 문자열을 가져옵니다. (위에서 말한대로, 끝 위치에 존재하는 문자는 포함되지 않기 때문에 6은 포함하지 않습니다) [3:7]은 위치 3에서 위치 6까지의 문자열을, [0:15]는 위치 0에서 위치 15까지의 문자열을 가져오는 것입니다. 인덱싱과 마찬가지로 시작 위치와 끝 위치에 음수가 들어갈 수 있는데, 이는 문자열을 가장 뒤에서부터 읽어서 문자열을 잘라올 수 있습니다.


K-7.png

위 문자열에서 위치 -13부터 시작하여 위치 -6까지의 문자열을 가져오려면, [-13:-5]라고 써야 합니다. 여기도 마찬가지로 위치 -5에 해당하는 문자는 포함이 되지 않기 때문에 실제로는 위치 -13부터 위치 -5까지의 문자열을 가져옵니다. 아래의 예를 한번 보도록 합시다.

1
2
3
4
5
>>> var = "python is best language ever"
>>> var[-13:-5]
'language'
>>> var[-15:-6]
't languag'

위 코드와 결과를 보시면, 우리의 예상대로 "language"라는 일부 문자열을 가져왔음을 확인하실 수 있습니다. 이번에는 한번 처음 위치나 끝 위치를 생략하여 결과를 살펴보도록 하겠습니다.

1
2
3
4
5
6
7
>>> var = "0123456789"
>>> var[2:]
'23456789'
>>> var[:5]
'01234'
>>> var[:]
'0123456789'

위 코드와 결과에서 끝 위치를 생략하면 처음 위치부터 시작하여 끝까지 문자열을 읽어오며, 시작 위치를 생략하면 처음부터 끝 위치까지 문자열을 읽어오고, 둘 다 생략하면 처음부터 끝을 읽어오라는 의미이기 때문에 문자열 전체를 가져오게 됩니다. 이해가 되시나요? 개념이 잘 이해가 되지 않더라도 조급해하지 마시고 천천히 읽어보셔서 이해를 해보시길 바랍니다.




9. 리스트(List)


이번 편에서는 리스트(List)에 대해 알아 보도록 하겠습니다. 우리가 배울 파이썬에서의 리스트(List)란, 순서가 있는 값들의 나열이라고 할 수 있습니다. 리스트를 구성하는 값을 요소 혹은 원소라고 부르며 어떠한 타입의 값이든 리스트의 요소로 올 수 있습니다. 이는 한가지의 타입으로만 이루어진 리스트뿐만 아니라, 여러가지 타입의 데이터로 이루어진 리스트를 구성할 수 있다는 말입니다. 이러한 리스트를 만드는 방법은 간단합니다. 요소들을 대괄호로 둘러싸고, 요소와 요소의 사이에는 콤마(,)로 구분을 해주면 됩니다.

1
2
3
4
5
>>> lst = [1, 2, 5, 'a', 'b']
>>> lst
[1, 2, 5, 'a', 'b']
>>> type(lst)
<class 'list'>

리스트를 보니 왠지 모르게 편할것 같은 생각이 들지 않나요? 위의 예 말고도 여러가지 리스트를 만들어 보도록 해봅시다. 리스트의 요소로 아무것이나 한번 넣어보도록 하겠습니다.

1
2
3
4
5
6
>>> lst = ['a', 3.14, 55555, 'abcdef', ['a', 'b', 'c']]
>>> lst
['a', 3.14, 55555, 'abcdef', ['a', 'b', 'c']]
>>> lst = [3.14132323, 3535242, 'abc', "def", 'color']
>>> lst
[3.14132323, 3535242, 'abc', 'def', 'color']

위의 코드와 결과를 보시면, 리스트 내에 실수와 정수, 문자열이 들어가고 심지어 리스트 내에 리스트가 들어가기도 한다는 것을 보실 수 있습니다. 이러한 리스트에도 우리가 '문자열'편에서 배운 인덱싱과 슬라이싱이란 개념이 존재합니다.

1
2
3
4
5
6
7
8
9
10
11
>>> lst = [1, 2, 'a', 'b', 'red', 'beaf', ['a', 'b', 'c']]
>>> lst[3]
'b'
>>> lst[-2]
'beaf'
>>> lst[1:3]
[2, 'a']
>>> lst[2:5]
['a', 'b', 'red']
>>> lst[6][2]
'c'

문자열과 똑같이, 리스트에도 0부터 시작하는 인덱스(index, 첨자)라는 녀석이 존재하며 시작 위치와 끝 위치를 가지고 잘라낸 요소 리스트를 가져올 수 있습니다. 아직 위 코드에서의 인덱싱과 슬라이싱이 잘 이해가 되지 않으시는 분들을 위해, 추가 설명을 보태도록 하겠습니다. 예를 들어서, 'lst[-2]'에서는 인덱스에 음수가 쓰였으므로 리스트 lst의 요소를 뒤에서부터 읽게 됩니다. 이것은 뒤에서 두번째에 있는 요소를 읽게 되는 것이라고 할 수 있습니다. 그리고 슬라이싱을 예로 들어서 'lst[2:5]'와 같은 문법은, 2가 시작 위치이고 5가 끝 위치를 의미하나 끝 위치는 범위에서 제외하므로 실제로는 위치 2, 3, 4에 있는 요소를 읽어오는 것입니다.


다시 돌아와서, 1행을 보시면 만들어진 리스트에서, 또 다른 리스트가 중첩되었음을 보실 수 있는데 이어서 10행에 쓰인 코드를 보시면 인덱싱이 조금 이상하죠?


K-9.png


'lst[6][2]'는 위치 6에 해당하는 요소의 위치 2에 있는 요소를 가져옵니다. 만약 lst[6][2]에도 리스트가 있다면, 'lst[6][2][위치]' 이런식으로 사용할 수 있을 것입니다. 그러나, 이렇게 리스트가 여러번 중첩되는 복잡한 형식은 잘 사용되지 않으나 알아두시는게 좋습니다.


그리고 리스트는 문자열과는 다르게 인덱싱을 통하여 리스트의 요소를 변경할 수 있습니다.

1
2
3
4
5
>>> lst = [1, 2, 'a', 'b', 'red', 'beaf']
>>> lst[2] = 3
>>> lst[4] = 'blue'
>>> lst
[1, 2, 3, 'b', 'blue', 'beaf']

또한, 문자열과 마찬가지로 리스트도 지원하는 연산자가 여럿 존재합니다. 그 중에서도 리스트를 연결하는 + 연산자와, 리스트를 반복하는 * 연산자에 대한 예제를 한번 보도록 하겠습니다.

1
2
3
4
5
6
>>> lst1 = ['A', 'B', 'C']
>>> lst2 = ['D', 'E', 'F']
>>> lst1 + lst2
['A', 'B', 'C', 'D', 'E', 'F']
>>> lst1 * 3
['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C']

위의 코드와 결과를 보시면, lst1과 lst2를 서로 연결하여 ['A', 'B', 'C', 'D', 'E', 'F']가 되며 리스트 lst1을 3번 반복하여 ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C']가 됨을 알 수 있습니다. 그리고, 이러한 연산자 뿐만이 아니라 리스트와 관련된 여러가지 함수가 존재합니다. 이번에는 리스트에 관련된 함수를 중점적으로 설명을 하도록 하겠습니다.


10. 리스트 관련 함수


리스트와 관련된 함수 중 추가, 삽입, 확장, 위치 등에 관한 9가지의 함수에 대해서 알아보도록 하겠습니다. 먼저 추가에 관련된 함수부터 시작하여 차례대로 알아가보도록 하겠습니다.


리스트 - 추가(append) 함수


리스트에 요소를 추가하는 함수인 append 함수에 대해서 알아보도록 하겠습니다. 기존의 리스트에 있는 요소에 다른 값을 추가하려면 아래와 같이 append 함수를 사용하시면 됩니다.

1
2
3
4
>>> fruit = ['apple', 'banana', 'pineapple']
>>> fruit.append('grape')
>>> fruit
['apple', 'banana', 'pineapple', 'grape']

위의 코드와 결과를 보시면, 리스트인 fruit에 grape라는 값을 요소로 추가하고 있음을 확인하실 수 있습니다. append 함수를 통해서 'grape'라는 값이 제대로 리스트에 추가되었음을 보실 수 있습니다. 리스트에 새로 값이 추가되는 위치는 가장 뒤에서 요소가 추가된다는 것도 알 수 있습니다. 리스트의 요소로 어떠한 타입의 값이든 올 수 있는것처럼, append 함수로 추가되는 값의 타입도 아무런 타입이 올 수 있음을 의미합니다.

1
2
3
4
>>> lst = ['A', 'B', 1, 2, 3.14, 10.16]
>>> lst.append([1, 2, 3])
>>> lst
['A', 'B', 1, 2, 3.14, 10.16, [1, 2, 3]]

추가되는 값의 형태가 리스트일 수도 있으며, 정수, 튜플 등 여러가지 타입이 올 수 있습니다. 잘 와닿지 않으신다면, 여러가지 타입의 값을 함수를 통해서 추가를 해보도록 하시는 것도 좋을것 같습니다.


리스트 - 삽입(insert) 함수


리스트에 요소를 삽입하는 함수인 insert 함수에 대해서 알아보도록 하겠습니다. 뒤에서부터 추가되는 append 함수와는 달리, 이 insert 함수는 지정한 위치에 추가하려는 값을 넣을 수 있습니다. 우선은 insert 함수를 어떻게 사용하는지에 대해 보도록 하겠습니다.

1
2
3
4
>>> lst = [1, 2, 4, 5, 6]
>>> lst.insert(2, 3)
>>> lst
[1, 2, 3, 4, 5, 6]

위 코드에서 두번째 행을 보시면, 첫번째 공간에는 2라는 숫자와 두번째 공간에는 3이라는 숫자가 있죠? 이 둘은 인자(parameter)라고 하며, 우선은 인자가 '함수에게 필요한 정보'라고 생각합시다. 첫번째 인자는 요소가 추가될 위치를 말하는 것이며, 두번째 인자에는 리스트에 삽입될 값이 들어옵니다. 위를 보시면, 위치 2에 3이라는 값이 추가되었다고 보시면 됩니다. 또 비슷한 경우를 볼까요?

1
2
3
4
>>> nums = ['one', 'two', 'three', 'five', 'six']
>>> nums.insert(3, 'four')
>>> nums
['one', 'two', 'three', 'four', 'five', 'six']

위 예제에서는 두번째 행을 보시면, 위치 3에 'four'이란 값이 추가되었다고 보시면 됩니다. 말 그대로 삽입(insert) 함수이며, 추가(append) 함수와는 위치에서 차이가 난다고 할 수 있습니다. 추가 함수는 뒤에서 부터 추가되는 반면에, 삽입 함수는 우리가 지정한 위치에 값이 들어가는 것이라고 할 수 있습니다. 이해되시죠?


리스트 - 확장(extend) 함수


리스트를 확장하는 함수인 extend 함수에 대해서 알아보도록 하겠습니다. 이 extend 함수는 한가지씩 값이 추가되는 append 함수와 달리, 여러개의 값을 추가할 수 있습니다. 한가지 주의하실 점이 있다면, 함수로 전달되는 인자에는 리스트만 올 수 있다는 사실을 기억해두시기 바랍니다.

1
2
3
4
>>> nums = [1, 2, 3, 4, 5, 6]
>>> nums.extend([7, 8, 9])
>>> nums
[1, 2, 3, 4, 5, 6, 7, 8, 9]

extend 함수에 전달되는 인자를 보니 리스트인 [7, 8, 9]가 전달되었음을 알 수 있습니다. 확장을 거친 후에는, 전달된 리스트와 리스트 nums가 연결된 것을 확인하실 수 있습니다. 추가 함수인 append 함수와 마찬가지로, extend 함수도 리스트의 뒤에서 추가됩니다.


리스트 - 위치 확인(index) 함수


리스트에 있는 특정 요소의 위치를 확인하는 함수인 index 함수에 대해서 알아보도록 하겠습니다. 이 index 함수의 첫번째 인자로는 찾으려는 요소의 값이 들어가며, 두번째 인자에는 탐색이 시작하는 위치, 세번째 인자에는 탐색이 종결되는 위치가 들어갑니다. 두번째 인자와 세번째 인자는 생략할 수 있습니다.

1
2
3
4
5
6
7
>>> lst = ['red', 'blue', 'green', 'yellow', 'white', 'black', 'blue']
>>> lst.index('blue')
1
>>> lst.index('blue', 2)
6
>>> lst.index('yellow', 2, 4)
3

위에 있는 코드와 결과에서, 2행을 보시면 'blue'가 처음으로 등장하는 요소의 위치를 출력한다는 것을 아실 수 있습니다. 그리고 4행에서는 시작점이 위치 2인데, 위치 2 이후에 등장하는 'blue'는 위치 6에 존재하므로 6이라는 결과가 출력되는 것입니다. 그리고 마지막으로, 6행에서는 시작점이 위치 2이며, 종결점이 위치 4임을 보실 수가 있습니다. 이는 위치 2와 위치 4를 포함한, 그 사이에 있는 'yellow'의 위치를 출력하는 것입니다. 위치는 1부터가 아니라, 0부터 시작한다는 사실을 잊지 말고 계세요.


리스트 - 요소 수(count) 함수


리스트에 존재하는 특정 요소의 수를 확인하는 함수인 count 함수에 대해서 알아보도록 하겠습니다. count 함수를 통해서 요소 개수를 확인하려면, count 함수로 해당하는 요소를 건네주면 됩니다. 한번 확인해보도록 합시다.

1
2
3
4
5
>>> lst = [1, 1, 2, 3, 4, 5, 6, 6, 6, 7]
>>> lst.count(1)
2
>>> lst.count(6)
3

위 예제의 2행을 보시면, 요소 1이 리스트 lst 내에 있는 개수를 가져오며 4행도 마찬가지로 요소 6이 리스트 내에 있는 개수를 가져옵니다. 직접 lst의 요소를 확인해보시면 정말로 1이 두개, 6이 세개라는 사실을 알 수 있습니다. 참으로 간단하죠?


리스트 - 요소를 꺼내는(pop) 함수


리스트의 요소를 꺼내는 함수인 pop 함수에 대해서 알아보도록 하겠습니다. pop 함수는 인자를 아에 생략하고 사용할 수 있으며, 특정한 요소를 리스트에서 꺼내려면 함수의 첫번째 인자로 꺼내려는 요소의 위치를 적어주시면 됩니다. 한번 pop 함수를 사용해보도록 합시다.

1
2
3
4
5
6
7
8
9
>>> lst = ['a', 'b', 'c', 'd', 'e']
>>> lst.pop()
'e'
>>> lst
['a', 'b', 'c', 'd']
>>> lst.pop(1)
'b'
>>> lst
['a', 'c', 'd']

위 예제에서 2행을 보시면 인자를 따로 적지않고 그냥 함수를 사용하였는데, 이 경우에는 리스트의 가장 뒤에 있는 요소를 꺼내가게 됩니다. 그리고 6행과 같이 위치를 넘겨주면, 그 위치에 있는 요소가 리스트에서 제외됩니다.


리스트 - 제거(remove) 함수


리스트의 요소를 제거하는 함수인 remove 함수에 대해서 알아보도록 하겠습니다. 이 remove 함수는 pop 함수와는 달리, 리스트 내에서 해당하는 값만을 제거합니다. 만약, 제거하려는 값이 리스트에 여러개가 존재하면 가장 앞에있는 요소부터 제거가 됩니다. 한번 remove 함수를 사용해보도록 합시다.

1
2
3
4
>>> a = [1, 2, 1, 3, 4, 1]
>>> a.remove(1)
>>> a
[2, 1, 3, 4, 1]

위의 예제에서 2행을 보시면 리스트 a 내에 1이라는 값을 제거하려고 하는데, 리스트 a에는 1이란 값이 3개나 있습니다. 이 경우에는 위에서 말한대로 가장 앞에있는 요소부터 제거가 된다고 했습니다. 그렇기 때문에, 가장 앞에 있는 1이 우선 제거가 되는 것입니다. 만약 'a.remove(2)' 였다면, 리스트 a에 있는 2라는 값을 제거한다고 할 수 있습니다.


리스트 - 정렬(sort) 함수


리스트의 요소들을 정렬하는 함수인 sort 함수에 대해서 알아보도록 하겠습니다. 우선은 이 함수로 전달되는 인자를 통해서, 정렬 방식을 변경할 수도 있으며 반전 여부도 지정할 수 있습니다. 우선은 sort 함수로 인자를 넘겨주지 않은 간단한 예제를 살펴보도록 하겠습니다.

1
2
3
4
>>> a = [3, 5, 1, 2, 7]
>>> a.sort()
>>> a
[1, 2, 3, 5, 7]

위 예제를 보시면, 2행에서 sort 함수가 사용되고 나서 3행에서 리스트 a가 정렬되었다는 것을 확인하실 수 있습니다. 물론 이렇게 순서대로 정렬할 수도 있겠지만, 반대로 역순으로 정렬할 수도 있습니다.

1
2
3
4
>>> a = [3, 5, 1, 2, 7]
>>> a.sort(reverse=True)
>>> a
[7, 5, 3, 2, 1]

위 예제의 결과를 보시니 리스트가 역순으로 정렬됨을 확인하실 수 있습니다. 저렇게 reverse를 True로 만들어 주지 않을 경우에는, reverse의 기본값이 False이기 때문에 순서대로 정렬된 데이터를 보실 수 있습니다. 편리하죠?


리스트 - 반전(reverse) 함수


리스트를 역순으로 뒤집는 함수인 reverse 함수에 대해서 알아보도록 하겠습니다. 이 함수는 단순히 리스트의 요소들을 모두 역순으로 뒤집는 역할만 하며, 정렬과는 상관이 없습니다. 한번 같이 reverse 함수를 살펴보도록 합시다.

1
2
3
4
>>> a = [1, 3, 5, 7, 9]
>>> a.reverse()
>>> a
[9, 7, 5, 3, 1]

위 예제를 보시면, 2행에서 reverse 함수가 사용되고 나서 4행에서 리스트 a가 반전되었음을 알 수 있습니다. 말 그대로, 리스트 a의 요소들을 뒤집었다고 생각하시면 됩니다.



저작자: http://blog.eairship.kr/