파이썬에서 리스트는 여러가지 자료를 저장할 수 있는 자료이다.
리스트 선언 = [요소, 요소, 요소, ...]
>>> list_a = [10, 1004, "안녕", "Hello", True, False]
>>> print(list_a)
[10, 1004, '안녕', 'Hello', True, False]
>>> print(type(list_a))
<class 'list'>
리스트는 숫자, 문자열 등 여러 자료형으로 구성되어 있다.
각각의 요소는 0부터 시작하는 인덱스가 존재한다.
>>> list_a[0] #대괄호안에 들어간 숫자가 인덱스이다.
10
>>> list_a[1]
1004
>>> list_a[3]
'Hello'
>>> list_a[4]
True
>>> list_a[1:4] #인덱스 1부터 인덱스4 전인 3까지 출력
[1004, '안녕', 'Hello']
인덱스 번호가 음수일 경우 뒤에서부터 요소를 선택할 수 있다.
>>> list_a[-1]
False
>>> list_a[-4]
'안녕'
>>> list_a[0] = "변경"
>>> list_a
['변경', 1004, '안녕', 'Hello', True, False]
인덱스 0번에 해당하는 10을 "변경"이라는 문자열로 변경
list = [첫번째 인덱스][두번째 인덱스]
>>> list_a[2][1]
'녕'
>>> list_a[3][1]
'e'
>>> list_a[3][3]
'l'
list_a[2]를 지정하면 2번째 문자열인 "안녕"을 꺼내오고 list_a[2][1]를 지정하면 2번째에서 가져온 "안녕"에서 다시 첫번째를 가져와 출력한다.
list = [[리스트0], [리스트1], [리스트2], ...]
>>> list_a = [[1, 2, 3], [10, 11,12], [31, 32, 33]]
>>> list_a[1]
[10, 11, 12]
>>> list_a[2][0]
31
list_a는 리스트 3개를 가지는 리스트가 된다.
리스트의 길이를 넘는 인덱스로 요소에 접그하려고 할 때 인덱스 에러 예외가 발생한다.
>>> list_a = [2, 46, 567,1004]
>>> list_a[4]
Traceback (most recent call last):
File "<pyshell#259>", line 1, in <module>
list_a[4]
IndexError: list index out of range
문자열에 적용할 수 있는 연산자는 리스트에서도 활용할 수 있다.
문자열 연결 연산자 (+)를 사용해 리스트들의 자료를 연결한다.
>>> list_a = [1, 2, 3, 4]
>>> list_b = [5, 6, 7, 8]
>>> list_a + list_b
[1, 2, 3, 4, 5, 6, 7, 8]
>>> list_a * 3
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
>>> print("list_b 요소 2번 반복 : ", list_b * 2)
list_b 요소 2번 반복 : [5, 6, 7, 8, 5, 6, 7, 8]
len()함수는 괄호 내붕 문자열을 넣으면 문자열의 글자 수를 세어 주지만 괄호안에 리스트 변수를 넣으면 요소의 개수를 세어 준다.
>>> len(list_a)
4
>>> len(list_b)
4
리스트에 요소를 추가하는 방법은 두 가지가 있다.
첫번째, 리스트명.append(요소)
두번째, 리스트명.insert(추가할 요소 위치, 요소)
>>> list_a = [1, 2,3, 5]
>>> list_a.append(6)
>>> print("list_a뒤에 요소 추가하기 : ", list_a)
list_a뒤에 요소 추가하기 : [1, 2, 3, 5, 6]
>>> list_a.insert(3, 4)
>>> print("list_a중간에 요소 추가하기 : ", list_a)
list_a중간에 요소 추가하기 : [1, 2, 3, 4, 5, 6]
요소 여러개를 추가할 때에는 extend()함수를 사용한다.
>>> list_a
[1, 2, 3, 4, 5, 6]
>>> list_a.extend([7, 8, 9])
>>> print("list_a에 여러요소 추가하기 : ", list_a)
list_a에 여러요소 추가하기 : [1, 2, 3, 4, 5, 6, 7, 8, 9]
원본에 어떠한 영향도 주지 않는 것을 비파괴적이라고 표현하고, .append(), insert(), .extend()함수와 같이 리스트에 직접적인 영향을 주는 함수를 파괴적이라 표현한다.
>>> list_a = [1, 2, 3]
>>> list_b = [4, 5, 6]
>>> print("list연결 연산자 사용 : ", list_a + list_b)
list연결 연산자 사용 : [1, 2, 3, 4, 5, 6]
>>> list_a #list_a에 영향없음, 비파괴적
[1, 2, 3]
>>> list_b
[4, 5, 6]
>>> list_a = [1, 2, 3]
>>> list_b = [4, 5, 6]
>>> list_a.extend(list_b)
>>> list_a #list_a에 영향있음, 파괴적
[1, 2, 3, 4, 5, 6]
>>> list_b
[4, 5, 6]
del 리스트명[인덱스] : 리스트의 특정 인덱스에 있는 요소를 제거한다.
>>> list_a = [1, 2, 3, 4, 5, 6, 7, 8]
>>> del list_a[1]
>>> print("del사용하여 리스트의 요소 하나 제거 : ", list_a)
del사용하여 리스트의 요소 하나 제거 : [1, 3, 4, 5, 6, 7, 8]
>>> list_b = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del list_b[1:3] #범위를 지정해 리스트 요소 제거하기
>>> list_b
[1, 4, 5, 6, 7, 8, 9]
>>> del list_b[4:] #4번째 인덱스 기준으로(포함)오른쪽 부분 전부 제거
>>> list_b
[1, 4, 5, 6]
>>> del list_b[:2] #2번째 인덱스 기준으로(불포함) 왼쪽 부분 제거
>>> list_b
[5, 6]
리스트명.pop(제거할 요소 인덱스)
>>> list_a = [1, 2, 3, 4, 5, 6, 7, 8]
>>> list_a.pop(1)
2
>>> print("pop사용하여 리스트의 요소 하나 제거 : ", list_a)
pop사용하여 리스트의 요소 하나 제거 : [1, 3, 4, 5, 6, 7, 8]
>>> list_a.pop()
8
>>> print("pop사용하여 리스트의 요소 하나 제거 : ", list_a)
pop사용하여 리스트의 요소 하나 제거 : [1, 3, 4, 5, 6, 7]
함수의 매개변수에 아무 것도 입력하지 않으면 자동으로 -1이 들어가 맨 마지막 요소가 제거된다
리스트.remove(값)
>>> list_c = [1, 5, 2, 3] #리스트 선언
>>> list_c.remove(5) #리스트 요소를 값으로 제거하기
>>> list_c
[1, 2, 3]
리스트 내부의 요소를 모두 제거할 때 clear()함수를 사용한다.
리스트.clear()
>>> list_c
[1, 2, 3]
>>> list_c.clear()
>>> list_c
[]
특정 값이 리스트 내부에 있는지 확인하는 방법으로 in연산자를 사용한다.
값 in 리스트 : 특정값이 리스트 안에 있는지 확인
값 not in 리스트 : 특정값이 리스트 안에 없는지 확인
>>> list_a = ['사과', '바나나', '키위', '수박', '귤']
>>> '수박' in list_a
True
>>> "사과" in list_a
True
>>> "포도" in list_a
False
>>> "복숭아" not in list_a
True
>>> "바나나" not in list_a
False