리스트의 생성
리스트 자료형은 순차적인 데이터를 나타내는데 사용한다.
리스트를 나타낼 때는 대괄호 []
안에 요소를 나열하며, ,
로 각 요소를 구분해 준다.
리스트이름 = [요소1, 요소2, 요소3,...]
리스트 내부의 요소에는 어떠한 자료형이라도 포함될 수 있다.
빈_리스트 = []
숫자_리스트 = [1, 2, 3, 4]
문자열_리스트 = ['gather', 'ye', 'rosebuds', 'while', 'ye', 'may']
혼합_리스트 = [1, 2, 'hello', 'world', 3, '!']
리스트_안의_리스트 = [1, 2, 3, ['hello', 'world!']]
list()를 사용하여 리스트로 변환 가능한 다른 자료형을 리스트로 바꿔줄 수 있다. (하나의 인자를 받음.)
>>> list('hello world!')
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']
>>> list(range(5))
[0, 1, 2, 3, 4]
리스트의 연산
리스트에는 +
와 *
연산자를 적용할 수 있다.
+
: 리스트 더하기
2개 이상의 리스트를 하나의 리스트로 합쳐준다.
>>> a = [1, 2]
>>> b = [3, 4, 5]
>>> a + b
[1, 2, 3, 4, 5]
>>> a = [1, 2]
>>> b = [3, 4, 5]
>>> c = [6]
>>> a + b + c
[1, 2, 3, 4, 5, 6]
*
: 리스트 반복
리스트를 반복하여 하나의 리스트로 만들어준다.
>>> my_list = [1, 2, 3]
>>> my_list * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
리스트 인덱싱 & 슬라이싱
리스트는 인덱싱과 슬라이싱이 가능하다.
리스트 인덱싱 (Indexing)
리스트의 변수명 다음에 []
으로 감싼 인덱스 값을 붙여주면 해당 인덱스 값을 가진 요소값을 리스트에서 추출할 수 있다.
my_list[인덱스 값]
>>> my_list = [1, 2, 3]
>>> my_list[0] # 리스트의 첫 번째 요소값
1
>>> my_list[2] # 리스트의 세 번째 요소값
3
>>> my_list[0] + my_list[2] # 리스트의 첫 번째 요소값과 세 번째 요소값의 합
4
>>> my_list[3] # 리스트의 인덱스 범위를 벗어난 수를 입력하면 인덱스 에러가 난다.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> my_list[-1] # 리스트의 뒤에서 첫 번째 값
3
>>> my_list[-2] # 리스트의 뒤에서 두 번째 값
2
>>> my_list[-4] # 음수 값 인덱싱도 마찬가지로 범위를 벗어나면 인덱스 에러가 난다.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
리스트에 포함된 리스트의 인덱싱도 가능하다. 두 개 이상으로 중첩된 리스트도 가능하다.
>>> my_list = [1, 2, [1, 2, 3]]
>>> my_list[2]
[1, 2, 3]
>>> my_list[2][0]
1
>>> my_list[2][-1]
3
>>> my_list[-1][1]
2
리스트 슬라이싱 (Slicing)
아래와 같은 형식으로 입력을 해주면 시작 인덱스 값부터 끝 인덱스 값 직전까지의 범위를 가지는 리스트를 슬라이스하여 반환한다.
my_list[시작:끝:스텝]
>>> my_list[0:3] # 끝 인덱스 값을 가지는 요소값은 포함하지 않는다.
[1, 2, 3]
>>> my_list[3:5] # 시작 인덱스 값을 가지는 요소값은 포함된다.
[4, 5]
음수 값을 넣어서 슬라이싱할 수도 있다.
>>> my_list[-5:-2] # 뒤에서 5번째 요소값부터 뒤에서 2번째 요소값 직전까지
[1, 2, 3]
>>> my_list[-2:-1] # 뒤에서 2번째 요소값부터 뒤에서 1번째 요소값 직전까지
[4]
>>> my_list[-2:-0] # 슬라이싱의 끝 인덱싱 값은 직전의 요소값까지만 포함시키므로 음수를 사용한 슬라이싱은 리스트의 마지막 요소값을 포함시키지 못한다.
[] # [4, 5]를 반환하고 싶지만 그렇게 안된다.
>>> my_list[-2:0] # 슬라이싱은 리스트의 인덱스 범위를 벗어나더라도 에러를 발생시키지 않고 빈 리스트를 반환한다.
[]
인덱스 값을 넣지 않을 수도 있다. 이 경우, 각각 맨 앞과 맨 끝을 나타낸다. 단, :
는 항상 포함되어야한다.
>>> my_list[:3] # 리스트의 맨 앞부터 3번째 요소값까지
[1, 2, 3]
>>> my_list[3:] # 리스트의 4번째 요소값 부터 마지막 요소값까지
[4, 5]
>>> my_list[:] # 리스트의 모든 요소값
[1, 2, 3, 4, 5]
>>> my_list[:-2] # 리스트의 맨 앞부터 뒤에서 두 번째 요소값 직전까지
[1, 2, 3]
>>> my_list[-2:] # 리스트의 뒤에서 두 번째 요소값부터 마지막 요소값까지
[4, 5] # 이 방법으로는 음수를 사용한 슬라이싱에서도 마지막 요소값을 포함시킬 수 있다.
스텝 칸에 값을 입력하면 입력한 값 만큼 건너뛰면서 슬라이싱한다. 입력하지 않으면 기본값인 1이 적용된다.
>>> my_list[0:5:2]
[1, 3, 5]
>>> my_list[::3]
[1, 4]
>>> my_list[::-2] # 음수 값을 넣으면 뒤에서부터 건너뛰면서 슬라이싱 한다.
[5, 3, 1]
>>> my_list[::-1]
[5, 4, 3, 2, 1]
리스트의 수정
리스트는 문자열과 달리 내부 항목이 변경될 수 있다. 인덱싱을 통해 리스트 내부의 요소값을 직접 바꿔줄 수 있다.
>>> my_list = ['hello', 'world!']
>>> my_list[0] = 'goodbye'
>>> my_list
['goodbye', 'world!']
슬라이싱을 이용하면 리스트에서 연속된 값을 수정할 수 있다.
>>> my_list = [1, 2, 3, 4, 5]
>>> my_list[2:4] = ['a', 'b', 'c']
>>> my_list
[1, 2, 'a', 'b', 'c', 5]
※ 인덱싱과 슬라이싱을 이용한 리스트 수정시 주의점
>>> my_list = [1, 2, 3, 4, 5] >>> my_list[2] = ['a', 'b', 'c'] # 리스트의 두 번째 요소를 ['a', 'b', 'c']로 교체 [1, 2, ['a', 'b', 'c'], 4, 5] # 리스트가 하나의 요소로 들어가버린다. >>> my_list = [1, 2, 3, 4, 5] >>> my_list[2:3] = ['a', 'b', 'c'] # 리스트의 두 번째 요소부터 세 번째 요소 사이의 리스트를 ['a', 'b', 'c']로 교체 >> my_list [1, 2, 'a', 'b', 'c', 4, 5]
리스트의 삭제
[]
을 사용하여 요소 삭제
>>> my_list = [1, 2, 3]
>>> my_list[0:1] = []
>>> my_list
[2, 3]
>>> my_list = [1, 2, 3]
>>> my_list[1:3] = []
>>> my_list
[1]
위의 ※에서 알아보았듯이 다음과 같은 방법은 제대로 작동하지 않는다.
>>> my_list = [1, 2, 3]
>>> my_list[1] = []
>>> my_list
[1, [], 3]
del
함수를 이용한 리스트 요소 삭제
>>> my_list = [1, 2, 3]
>>> del my_list[1]
>>> my_list
[1, 3]
>>> my_list = [1, 2, 3]
>>> del my_list[0:2]
>>> my_list
[3]
리스트의 메서드 (Method)
리스트들은 리스트 클래스의 인스턴스이므로 리스트 클래스가 가지고 있는 메서드들을 .
을 사용해 호출하여 사용할 수 있다.
리스트이름.메서드이름(인자)
append
: 리스트의 마지막에 요소 추가
하나의 인자를 받아 리스트의 맨 마지막에 추가한다.
리스트이름.append(인자)
>>> my_list = [1, 2, 3]
>>> my_list.append(4)
>>> my_list
[1, 2, 3, 4]
>>> my_list = [1, 2, 3]
>>> my_list.append([4, 5])
>>> my_list
[1, 2, 3, [4, 5]]
extend
: 리스트 확장
하나의 리스트를 인자로 받아서 원래의 리스트에 더해준다.
리스트이름.extend(리스트 인자)
>>> my_list = [1, 2, 3]
>>> my_list.extend([4, 5])
>>> my_list
[1, 2, 3, 4, 5]
insert
: 리스트의 특정 위치에 요소 삽입
하나의 인덱스 값과 하나의 요소를 인자로 받아 인덱스 값의 위치에 요소를 삽입한다.
리스트이름.insert(삽입할 위치의 인덱스 값, 삽입할 요소)
>>> my_list
[1, 2, 3, 4, 5]
>>> my_list.insert(2, 'a')
>>> my_list
[1, 2, 'a', 3, 4, 5]
remove
: 리스트 요소 제거
하나의 요소를 인자로 받아 리스트 내에서 첫 번째로 일치하는 요소를 삭제한다.
리스트이름.remove(삭제할 요소)
pop
: 리스트 요소 꺼내기
하나의 인덱스 값을 인자를 받아서 리스트 내에서 해당 인덱스 값의 요소를 삭제하고 삭제한 값을 리턴한다.
아무 값도 받지 않을 경우 기본값은 -1. 즉, 제일 마지막 요소를 삭제하고 그 값을 리턴한다.
리스트이름.pop(삭제할 요소의 인덱스 값)