Python의 List#

Python에서 List는 순서가 있는 가변적인 데이터의 집합입니다.
List는 다양한 데이터 타입의 항목을 포함할 수 있으며, 항목들은 변경, 추가, 삭제가 가능합니다.

10,000개의 값을 다루어야 한다고 가정해봅시다.
변수를 10,000개 만든다는 것은 아주 비효율적입니다.
따라서, 복수개의 값을 효율적으로 다루기 위하여 Python은 List를 제공합니다.

1. List 생성#

List는 다음과 같이 [ ] 를 사용하여 생성할 수 있습니다.
[ ] 안에 여러 개 값을 넣어서 하나의 List로 다룰 수 있습니다.
다음 예제를 잘 보면, 정수, 실수, 문자열이 하나의 List에 포함됩니다.
하나의 List에 여러가지 Data type을 담을 수 있다는 것도 중요한 특징입니다.
List에 포함되어 있는 각 값을 원소(Element)라고 합니다.

v = [1, 2.0, 'abc']

2. Read#

List의 Element 로부터 값을 Read 할 수 있습니다.
print( )안에 v[0]은 List v 에서 Index 0 의 값인 10을 Read 하라는 의미 입니다.
(Index는 1부터 시작하는 것이 아니라, 0 부터 시작합니다.)
print( )안에 v[1]은 List v 에서 Index 1 의 값인 20을 Read 하라는 의미 입니다.

v = [10, 20]

print(v[0])
print(v[1])

3. Write#

List의 Element에 값을 Write 할 수 있습니다.
List v 에 [10, 20] 이 담겨 있는 상태에서, Index 0 의 값을 99 로 Write 하였습니다.
print( ) 해보면, v[0]의 값이 99 로 변경된 것을 확인할 수 있습니다.

v = [10, 20]

v[0] = 99

print(v[0])
print(v[1])

4. List slicing#

List slicing 문법을 사용하면 Element를 쉽게 쪼개어 사용할 수 있습니다.
아주 편리한 문법이기 때문에 꼭 알아 둡시다.

다음 코드에서, v[0:5] 의 의미는 Index 0 부터 Index 4 까지 Read 하라는 의미 입니다.
따라서, [‘a’, ‘b’, ‘c’, ’d’, ’e’] 가 출력됩니다.
v[0:5]로 코딩했지만, Index 5 가 아니라 Index 4 까지임을 명확히 인지해야 합니다.

v = ['a', 'b', 'c', 'd', 'e']

print(v[0:5])

비슷한 예제의 다음 코드를 봅시다.
v[0:3] 이므로 Index 0, 1, 2를 Read 하게 됩니다.
따라서, [‘a’, ‘b’, ‘c’] 가 출력됩니다.

v = ['a', 'b', 'c', 'd', 'e']

print(v[0:3])

다음 코드에서, v[0: ] 를 보면 Slicing이 끝나는 Index를 지정하지 않았습니다.
이런 경우, List의 가장 마지막 Element까지 자동으로 지정되기 때문에, print( )의 결과는 [‘a’, ‘b’, ‘c’, ’d’, ’e’]가 출력됩니다.

v = ['a', 'b', 'c', 'd', 'e']
w = v[0: ]
print(w)

다음 코드에서, v[0:99] 를 보면 Slicing이 끝나는 Index가 List의 Length 보다 큽니다.
이런 경우도 List의 가장 마지막 Element까지만 자동 지정되기 때문에 Error를 발생시키지 않습니다.

v = ['a', 'b', 'c', 'd', 'e']
w = v[0:99]
print(w)

다음 코드에서, v[0:5:1] 는 Index 0 부터 Index 4 까지 1씩 건너뛰며 Read를 하라는 의미 입니다.
따라서, print( ) 의 결과는 [‘a’, ‘b’, ‘c’, ’d’, ’e’] 입니다.

v = ['a', 'b', 'c', 'd', 'e']
w = v[0:5:1]
print(w)

다음 코드에서, v[0:5:2] 는 Index 0 부터 Index 4 까지 2씩 건너뛰며 Read를 하라는 의미 입니다.
따라서, print( ) 의 결과는 [‘a’, ‘c’, ’e’] 입니다.
[arg1:arg2:arg3] 에서 arg3 은 얼만큼씩 건너뛰기 할 것인가를 의미하며 생략하면 1 과 같습니다.

v = ['a', 'b', 'c', 'd', 'e']
w = v[0:5:2]
print(w)

v[ : :1] 처럼 Slicing의 시작과 끝 Index를 지정하지 않으면, List의 전체 Element를 Read 합니다.
Slicing의 시작 Index를 지정하지 않으면 List의 첫 Element로 자동 지정되고,
Slicing의 끝 Index를 지정하지 않으면 List의 마지막 Element로 자동 지정됩니다.

v = ['a', 'b', 'c', 'd', 'e']
w = v[ : :1]
print(w)

v[ : :-1] 는 역순으로 1칸씩 건너뛰며 Read 하라는 의미 입니다.
따라서, print( )의 결과는 [’e’, ’d’, ‘c’, ‘b’, ‘a’] 처럼 역순으로 출력됩니다.

v = ['a', 'b', 'c', 'd', 'e']
w = v[ : :-1]
print(w)

다음 코드 처럼, v[ : :-2]로 코딩했다면 역순으로 2칸씩 건너뛰며 Read하기 때문에, 그 결과는 [’e’, ‘c’, ‘a’]가 됩니다.

v = ['a', 'b', 'c', 'd', 'e']
w = v[ : :-2]
print(w)

5. 원소 추가#

List에 원소를 추가하는 방법을 알아 봅시다.
많이 사용되는 편이므로 잘 알아 둡시다.

List v 에 ‘A’, ‘B’ 가 들어 있습니다.
여기에 ‘C’ 를 맨 뒤에 추가 하고자 합니다.
이런 경우, .append() 를 사용하면 됩니다.
v.append('C') 를 코딩하면, List v 의 맨 마지막에 ‘C’ 원소가 추가되어 List v 는 [‘A’, ‘B’, ‘C’] 가 됩니다.

v = ['A', 'B']
print('before', v)

v.append('C')
print('after', v)

특정 Index에 원소를 삽입하고 싶은 경우, .insert() 를 사용하면 됩니다.
다음 코드처럼, v.insert(0, 'C') 로 코딩하면, List v 의 Index 0 에 ‘C’ 원소가 삽입됩니다.
따라서, List v 는 [‘C’, ‘A’, ‘B’] 가 됩니다.

v = ['A', 'B']
print('before', v)

v.insert(0, 'C')
print('after', v)

List 뒤에 List를 이어 붙이는 경우, 다음 코드처럼 .extend() 를 사용하면 됩니다.
List v 는 [‘A’, ‘B’] 이고, List w 는 [‘C’, ‘D’] 입니다.
여기에 v.extend(w) 라고 코딩하면, List v 의 맨 뒤에 List w 를 이어 붙입니다.
따라서, List v 는 [‘A’, ‘B’, ‘C’, ‘D’] 가 됩니다.

v = ['A', 'B']
print('before', v)

w = ['C', 'D']
v.extend(w)
print('after', v)

6. 원소 삭제#

List에 원소를 삭제하는 방법을 알아 봅시다.
다음 코드에서, List v 는 [‘A’, ‘B’] 입니다.
여기서, 값이 ‘A’인 원소를 삭제 할 경우, v.remove('A') 처럼 코딩하면 됩니다.
이처럼 .remove() 는 해당 값을 가지는 원소를 삭제합니다.

v = ['A', 'B']
print('before', v)

v.remove('A')
print('after', v)

List 의 원소를 Index 로 삭제하고 싶은 경우, del 명령어를 사용하면 됩니다.
다음 코드 처럼 del v[0] 으로 코딩하면 List v 의 Index 0 을 삭제 한다는 의미 입니다.

v = ['A', 'B']
print('before', v)

del v[0]
print('after', v)