리스트(List)는 파이썬의 자료 구조 중 하나로, 값을 나열 해 놓은 배열이라고 생각하면 된다. list는 string, tuple과 함께 순서가 있는 자료형이다.
파이썬의 list는 다른 언어의 list와 조금 다르다. 파이썬과 함께 코딩 테스트에 많이 쓰이는 C++에 비교를 해 보자면, C++의 STL에서 제공하는 vector 자료형과 비슷하다고 볼 수 있다.
append()와 remove() 메소드를 제공하는 linked list를 사용한다.
대괄호([])로 요소들을 감싸 리스트로 만들 수 있다.
a = [] # 원소가 들어있지 않은 리스트도 리스트
b = [0, 1, 2, 3] # 숫자 자료형 저장
c = ['Hello', 'World!'] # 문자열도 저장할 수 있다.
d = [0, 'zero'] # 여러 자료형을 함께 저장할 수 있다.
e = [0, [1,2], [3,4,5]] # 리스트 안에 또 다른 리스트를 넣을 수 있다.
리스트도 문자열과 마찬가지로 인덱싱을 할 수 있다.
a = ['zero', 'one', 'two', 'three', ['four', 'five']]
print(a[0])
>> zero
print(a[3])
>> three
print(a[-1])
>> ['four','five']
print(a[4][1]) # 이중 리스트 인덱싱
>> five
또한 해당 인덱스를 가지고 슬라이싱을 할 수도 있다.
a = ['zero', 'one', 'two', 'three', ['four', 'five']]
print(a[:2])
>> ['zero', 'one']
print(a[2:])
>> ['two', 'three', ['four', 'five']]
print(a[1:3])
>> ['one', 'two']
print(a[4][:1]) # 이중 리스트의 슬라이싱
>> ['four']
리스트도 문자열처럼 +와 * 연산이 가능하다.
a = [1, 2, 3]
b = [4, 5, 6]
print(a+b)
>> [1, 2, 3, 4, 5, 6]
print(a*3)
>> [1, 2, 3, 1, 2, 3, 1, 2, 3]
리스트의 길이는 len 함수를 사용해서 구할 수 있다.
a = [1, 2, 3, 4, 5]
print(len(a))
>> 5
리스트의 요소들을 for 문으로 접근하려면 다음과 같은 방법을 사용할 수 있다.
a = [1, 2, 3, 4, 5]
for i in a: # element 들에 접근
print(i, end=" ")
>> 1 2 3 4 5
for idx in range(len(a)): # 인덱스로 접근
print(a[idx], end=" ")
>> 1 2 3 4 5
# enumerate를 사용하면 매 반복마다 리스트의 인덱스와 값을 튜플로 반환한다.
for idx, value in enumerate(a):
print(idx, value)
>> (0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
리스트 값 수정하기
a = [1, 2, 3, 4, 5]
a[1] = 10
print(a)
>> [1, 10, 3, 4, 5]
리스트 요소 삭제하기
a = [1, 2, 3, 4, 5]
del a[1]
print(a)
>> [1, 3, 4, 5]
del a[2:] # 슬라이싱을 통한 삭제도 가능하다.
>> [1, 3]
append 함수
a = [1, 2, 3, 4, 5]
a.append(6)
print(a)
>> [1, 2, 3, 4, 5, 6]
# 문자열을 비롯한 어떤 자료형도 추가할 수 있다.
a.append('seven')
print(a)
>> [1, 2, 3, 4, 5, 6, 'seven']
a. append([8, 9])
print(a)
>> [1, 2, 3, 4, 5, 6, 'seven', [8, 9])
insert 함수
a = [1, 3, 4, 5]
a.insert(1,2)
print(a)
>> [1, 2, 3, 4, 5]
remove 함수
a = [1, 2, 2, 3]
a.remove(2)
print(a)
>> [1, 2, 3]
pop 함수
a = [1, 2, 3, 4]
b = a,pop()
print(a)
>> [1, 2, 3]
print(b)
>> 4
b = a.pop(0)
print(a)
>> [2, 3]
print(b)
>> 1
sort 함수와 reverse 함수
a = b = [2, 3, 5, 1, 4]
a.sort()
print(a)
>> [1, 2, 3, 4, 5]
b.reverse()
print(b) >> [4, 1, 5, 3, 2]
index 함수
a = [1, 2, 2, 3, 4]
print(a.index(2))
>> 1
print(a.index(3))
>> 3
print(a.index(5))
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> ValueError: 5 is not in list
count 함수
a = [1, 2, 3, 3, 3]
print(a.count(2))
>> 1
print(a.count(3))
>> 3
extend 함수
a = [1, 2, 3]
a.extend([4, 5])
print(a)
>> [1, 2, 3, 4, 5]
b = [6, 7]
a.extend(b)
print(a)
>> [1, 2, 3, 4, 5, 6, 7]
코드의 간결함을 지향하는 파이썬 답게 리스트 안에서 for 문 사용이 가능하다.
(처음엔 이걸 몰라서 for 문 안에서 list를 if로 정리하고 있었다.)
for 문과 함께 if 문도 함께 사용 가능하다.
a = [1, 2, 3, 4, 5, 6]
print([item for item in a if item % 2 == 0])
>> [2, 4, 6]
아직 쉬운 단계의 문제들 밖에 풀어보지 않았지만, 리스트 자료형은 정말 많이 쓰이는 것 같다. 특히나 리스트 슬라이싱을 이용해서 풀이의 코드 길이를 확 줄일 수 있는 경우가 많았다.
또한 다른 언어의 배열과는 다르게 vector의 성격을 갖고 있다는 점이 굉장한 장점이라고 생각한다. append와 remove가 제공되기 때문에 배열의 크기와 인덱스를 매 번 고려하지 않아도 된다는 점이 만족스럽다.