파이썬의 리스트는 전반적으로 문자열(String)과 유사한 부분이 많다.
겹치는 부분은 비교적 간단하게 설명하므로 문자열(String) 게시글(rebro.kr/123)과 비교해서 본다면 도움이 될 것 같다.
[목차]
1. 리스트 생성, 연산자
2. 리스트의 인덱싱과 슬라이싱
3. 리스트의 수정, 변경, 삭제
4. 리스트 관련 함수
5. 튜플 (Tuple)
1. 리스트 생성, 연산자
파이썬에서 리스트를 생성하는 방법은 대괄호 '[ ]' 로 감싸주고, 리스트의 원소들은 쉼표 ','로 구분해준다.
리스트는 아무 원소를 포함하지 않는 빈 리스트일 수도 있고, 숫자를 원소로 가질 수도 있고 문자열을 원소로 가질 수도 있다. 즉, 어떠한 자료형도 원소로 가능하다.
a = [] # 빈 리스트
a = [1,2,3,4] # 숫자 원소
a = ['python', 'c++', 'java'] # 문자열 원소
a = ['python', 1, 5] # 문자열과 숫자가 섞여도 됨
a = [1, 2, [1, 2]] # 리스트를 원소로 가질 수 있음
a = [[100, 10], [4, 6]]
리스트에서도 덧셈 연산자 +와 곱셈 연산자 *를 사용할 수 있다.
두 리스트를 더하는 것은 두 리스트를 합치는 기능을 하고, 리스트에 숫자를 곱하게 되면 리스트가 해당 숫자만큼 반복되어 새로운 리스트를 생성한다.
문자열과 작동 방식이 동일하며, 아래의 예시들처럼 이용 가능하다.
a = [1, 2]
b = [3, 4, 5]
c = a+b # c = [1, 2, 3, 4, 5]
d = b+a # d = [3, 4, 5, 1, 2]
e = a*3 # e = [1, 2, 1, 2, 1, 2]
f = a*2 + b*3 # f = [1, 2, 1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5]
2. 리스트의 인덱싱과 슬라이싱
리스트도 문자열과 동일한 방식으로 인덱싱과 슬라이싱이 가능하다.
마찬가지로 인덱스의 시작은 0이며, 음수인 경우에는 뒤에서 몇 번째인지를 나타낸다.
리스트는 문자열이나 리스트를 자신의 원소로 가질 수 있기 때문에 해당 원소 내의 원소도 접근이 가능하다.
a = [1, 2, [3, 4], 'python']
print(a[0]) # ans : 1
print(a[-1]) # ans : 'python'
print(a[2]) # ans : [3, 4]
print(a[2][0]) # ans : 3
print(a[3][2]) # ans : 't'
리스트 안에 숫자, 문자열, 리스트가 원소로 존재하는 경우이다.
인덱스나 슬라이싱에 대한 자세한 설명은 위에서 언급한 문자열 게시글을 참고하면 된다.
리스트 내에 리스트가 원소로 있는 중첩 리스트의 경우는 C/C++를 배운 사람이라면 '이차원 배열'을 생각하면 쉽다.
a[2]가 리스트이므로 a[2]안의 원소에 접근하기 위해서는 동일한 방식으로 인덱스를 붙여주면 된다.
만약 안에 또 리스트가 있다면 a[2][0][1], ... 이렇게 이용해주면 된다.
리스트에서 슬라이싱을 이용하면 포함된 원소로 구성된 리스트를 반환해준다.
a = [1, 2, 3, 4, 5]로 주어지면 a[0:2] = [1, 2], a[1:] = [2, 3, 4, 5], a[:3] = [1, 2, 3] 이렇게 문자열과 같은 방식으로 작동하고, 중첩 리스트인 경우에도 인덱싱과 동일하다.
크게 어렵지 않으니 예시를 통해 쉽게 이해할 수 있다.
a = [1, 2, [3, 4, 5], 'python']
print(a[:2]) # ans : [1, 2]
print(a[0:3]) # ans : [1, 2, [3, 4, 5]]
print(a[2:]) # ans : [[3, 4, 5], 'python']
print(a[2][1:]) # ans : [4, 5]
print(a[3][:3]) # ans : 'pyt'
3. 리스트의 수정, 변경, 삭제
파이썬의 문자열은 immutable 한 성질을 가졌기 때문에 특정 문자를 다른 문자로 직접 바꿀 수는 없었지만, 리스트는 원소를 다른 원소로 바꾸거나 삭제할 수 있다.
1. 리스트에서 원소 하나 수정하기
a = [1, 2, 3]
a[2] = -1
print(a) # ans : [1, 2, -1]
2. 리스트에서 연속된 범위의 값 수정하기
a = [1, 2, 3]
a[1:2] = ['a', 'b', 'c']
print(a) # ans : [1, 'a', 'b', 'c', 3]
a[2:4] = [10]
print(a) # ans : [1, 'a', 10, 3]
리스트는 연속된 범위의 원소를 한 번에 수정할 수 있다.
바꾸고 싶은 범위를 슬라이싱 하듯이 [a:b]로 지정해주고, 바꾸고 싶은 원소로 이루어진 리스트를 할당하면 [a:b] 범위가 할당하는 리스트로 바뀌게 된다.
여기서, a[1:2] = ['a', 'b', 'c']와 a[1] = ['a', 'b', 'c']은 완전히 다른 결과를 이끌어낸다는 점을 주의하자.
수정되는 원소는 a[1]로 동일하지만, a[1:2]는 a[1]의 자리에 'a', 'b', 'c'의 원소를 대신 넣어주는 것이고, a[1]은 두번째 원소를 리스트 ['a', 'b', 'c']로 교체해주는 것이다.
만약 a[1] = ['a', 'b', 'c']를 수행한다면 a = [1, ['a', 'b', 'c'], 3]으로 나오게 된다.
3. 리스트에서 원소 삭제하기
연속된 범위의 값을 수정할 때 빈 리스트를 할당해주면 해당 범위의 원소를 삭제한 것과 동일한 결과로 나온다.
a = [1, 2, 3]
a[1:2] = []
print(a) # ans : [1, 3]
또 del 이라는 리스트 요소를 삭제하는 함수를 이용해서 원소를 제거할 수도 있다.
다음과 같이 이용한다.
a = [1, 2, 3]
del a[1]
print(a) # ans : [1, 3]
a = [1, 2, 3, 4]
del a[1:3]
print(a) # ans : [1, 4]
del 뒤에 지우고 싶은 원소 혹은 범위를 적어주면 입력된 값이 리스트에서 제거된다.
추가적으로 del은 리스트뿐만 아니라 다른 자료형에서도 이용 가능하다.
4. 리스트 관련 함수
리스트 a가 기본으로 a = [1, 4, 2, 3]이라고 선언되어있다고 가정한다.
함수 | 설명 | 예시 | 수행 결과 |
append | 리스트의 맨뒤에 원소를 추가 | a.append(6) a.append([3, 4]) |
a = [1, 4, 2, 3, 6] a = [1, 4, 2, 3, [3, 4]] |
extend | 리스트의 맨뒤에 여러 원소를 추가 | a.extend([3, 4]) | a = [1, 4, 2, 3, 3, 4] |
sum | 리스트의 원소의 합을 반환 | sum(a) | 10 |
max/min | 리스트의 원소중 최댓값/최솟값을 반환 | max(a) / min(a) | 4 / 1 |
len | 리스트의 원소 개수를 반환 | len(a) | 4 |
sort | 리스트의 원소를 오름차순으로 정렬 sort(reverse=True) : 내림차순 |
a.sort() a.sort(reverse=True) |
a = [1, 2, 3, 4] a = [4, 3, 2, 1] |
sorted | 리스트의 원소를 오름차순으로 정렬한 리스트를 반환 | a.sorted() | [1, 2, 3, 4] |
reverse | 리스트를 뒤집어줌 | a.reverse() | a = [3, 2, 4, 1] |
index | 리스트에 해당 원소가 존재하면 위치를 반환한다. 존재하지 않으면 오류를 발생시킨다. |
a.index(4) a.index(7) |
1 ValueError : 7 is not in list |
insert | 리스트의 i번째 위치에 b를 삽입 | a.insert(2, 'k') | a = [1, 4, 'k', 2, 3] |
remove | 리스트에서 처음으로 나오는 해당 원소를 삭제 | a.remove(2) | a = [1, 4, 3] |
pop | 원소를 삭제하고 삭제된 원소를 반환 아무원소도 넣지 않는 경우 맨 뒤의 원소 제거 |
a.pop() a.pop(0) |
a = [1, 4, 2] a = [4, 2, 3] |
count | 리스트에 포함된 원소 x의 개수 반환 | a.count(3) | 1 |
clear | 리스트의 모든 원소를 삭제 | a.clear() | a = [ ] |
5. 튜플 (Tuple)
튜플은 리스트와 비슷하지만 immutable하다는 큰 차이점이 있다.
따라서 튜플은 한번 생성하면 변경할 수 없기 때문에 보통 항상 일정한 값을 가지기를 원하는 경우에 사용한다.
더불어 리스트에서 사용하는 많은 함수들을 당연히 튜플에서는 사용하지 못한다.
min/max, len, sum등 원소를 조작하지 않는 함수들만 이용할 수 있다.
튜플을 생성하는 방법은 리스트에서 대괄호 '[ ]'를 이용했다면 튜플은 소괄호 '( )'를 이용한다.
원소가 1개인 경우에는 원소 뒤에 쉼표 ','를 넣어주어야 하고, 괄호를 쓰지 않고 a = 1, 2, 3 이런 식으로 선언하면 자동으로 튜플로 지정되는 특징이 있다.
앞의 리스트에 대한 설명을 잘 이해했다면 튜플 또한 이해하는게 어렵지 않다. 예시 코드를 통해서 충분히 이해가 될 것이다.
# 튜플 선언 방법
a = (1, 2, 3)
a = (1,)
a = 1, 2, 3
a = ()
a = (1, 2, (1, 2))
a = (1, 2, 3, 4)
print(a[1]) # ans : 2
print(a[1:3]) # ans : (2, 3)
a[2] = 1 #Error : 'tuple' object does not support item assignment
del a[2] #Error : 'tuple' object doesn't support item deletion
print(sum(a)) # ans : 10
print(min(a)) # ans : 1
print(max(a)) # ans : 4
b = (10, 7)
print(a+b) # ans : (1, 2, 3, 4, 10, 7)
print(b*2) # ans : (10, 7, 10, 7)
PC로 보시는 것을 권장합니다.
피드백은 언제나 환영입니다. 댓글로 달아주세요 ^-^
'Programming Language > Python' 카테고리의 다른 글
[Python] 3. 입출력 (Input / Output) (0) | 2021.04.06 |
---|---|
[Python] 2. 파이썬의 기본 자료형(4) - 딕셔너리(Dictionary) & 집합(Set) (0) | 2021.03.22 |
[Python] 2. 파이썬의 기본 자료형(2) - 문자열(String) (1) | 2021.03.16 |
[Python] 2. 파이썬의 기본 자료형(1) - 숫자 자료형 (0) | 2021.03.16 |
[Python] 1. 파이썬 기본 문법 (0) | 2021.03.05 |