👨‍👩‍👦‍👦

4.4.1. 리스트

1. List

리스트는 순서를 가진 데이터들의 집합입니다.
리스트는 순서를 가진 데이터들의 집합(Sequence)을 의미합니다. 다른 프로그래밍 언어를 사용하신 분들이라면 배열(Array)이라는 이름으로 더 친숙할 것입니다.
a = [1, 2, 3, 4, 5]
 
리스트는 값의 변경이 가능하며, 다른 자료형을 입력 할 수 있습니다. 리스트 안에 리스트로 다차원의 리스트를 만드는 것도 가능합니다.
데이터 분석에서는 행렬을 표현하는 방법으로 리스트를 사용합니다.
입력
a[0] = 10000 a b=[['a','b','c'], [1, 2, 3]] b[1][2] s = 'leehojun' s[0] s[0] = 'k'
 
출력
[10000, 2, 3, 4, 5] 3 'l' ERROR #문자열 할당은 지원되지 않습니다.
 
아래 보시는 것처럼 값의 중복을 허락하며(set 자료형은 불가능), 인덱스를 사용하여 인덱싱과 슬라이싱을 사용할 수 있습니다.
입력
a = [1, 2, 3, 4, 5, 5] a[0] #indexing a[0:3] #slicing->자료형[start:stop:step]
 
출력
1 [1, 2, 3]
 

1.1 list의 사칙연산

직접 실습을 해보시면서 익혀보세요. 참고로 리스트 안에 있는 값들을 3씩 곱하고 싶다면([1, 2, 3][3, 6, 9]) for문을 사용하거나 numpy를 사용하셔야 합니다. a*3은 리스트형을 3번만큼 연결한다는 뜻이에요.
입력
a = [1, 2, 3] a + a a + 3 a + [1] a - a a - [1] a / 3 a // a a * a a * 3 a * [3]
 
출력
[1, 2, 3, 1, 2, 3] # a + a ERROR # a + 3 [1, 2, 3, 1] # a + [1] ERROR # a - a ERROR # a - [1] ERROR # a / 3 ERROR # a // a ERROR # a * a [1, 2, 3, 1, 2, 3, 1, 2, 3] # a * 3 ERROR # a * [3]
 
 

1.2 메서드

리스트의 내장 메서드는 굉장히 중요합니다. 이번 챕터부터는 리스트의 메서드를 실습해보도록 할게요. 각 자료형의 메서드 확인은 dir(자료형)을 통해 가능합니다. 예를 들어 아래처럼 확인이 가능해요.
l = [1, 2, 3] dir(l)

1.2.1 append

우선 append 입니다. 리스트 맨 뒤에 값을 붙이는 메서드입니다.
입력
a.append(10) a
 
출력
[1, 2, 3, 10]
 

1.2.2 clear

안에 있는 원소들을 다 비우는 메서드입니다.
입력
a.clear() a
 
출력
[]
 

1.2.3 copy

a라는 리스트를 만들고, b와 c에도 a와 똑같은 값을 할당하고 싶습니다. 그리고 c의 값을 수정할거예요.
입력
a = [1, 2, 3] b = a c = b c[0] = 10000 a
 
출력
[10000, 2, 3]
c를 수정하였지만 a의 값도 수정이 되었습니다.
위 코드와 같이 b = a, c = a 는 새로운 리스트에 독자적인 값이 할당되는 것이 아닌 기존 리스트 a를 가리키고 있는 꼴이 됩니다. 그래서 위 코드를 실행하면 c의 값이 아닌 a의 값이 수정되는거에요.
우리가 원하는 결과값을 얻고 싶다면 copy 메서드를 사용하여 리스트를 복사시켜 줍니다.
입력
a = [1, 2, 3] b = a.copy() c = b.copy() c[0] = 10000 print(f'a는 : {a}, c는 : {c}')
 
출력
a는 : [1, 2, 3], c는 : [10000, 2, 3]
 

1.2.4 count

리스트 안에 특정 값이 얼마나 있는지를 세주는 메서드입니다.
입력
a = [1, 2, 3, 1, 2, 3, 1, 1, 1] a.count(1)
 
출력
5
 

1.2.5 extend

append와 같이 리스트 마지막에 값들을 추가해주는 메서드 입니다. append는 한 개만 붙일 수 있지만extend는 많은 값들을 붙일 수 있어요.
입력
b = [1, 2, 3, 4] c = [1, 2, 3, 4] b.extend([5, 6, 7]) c.append(5, 6, 7) c.append([5, 6, 7])
 
출력
[1, 2, 3, 4, 5, 6, 7] ERROR [1, 2, 3, 4, [5, 6, 7]] #리스트 형태로 붙어 2차원 행렬이 됩니다.
 

1.2.6 index

특정 값의 위치를 반환해주는 메서드입니다.
입력
a = [10, 1, 1, 11, 2, 23, 12] a.index(11) a[a.index(11)] a[:a.index(11)]
 
출력
3 # a.index(11) 11 # a[a.index(11)], 인덱싱 [10, 1, 1] #a[:a.index(11)], 슬라이싱
 

1.2.7 insert

마찬가지로 특정 값을 추가해주는 메서드입니다. 첫 번째 인자값으로는 인자값이 들어갈 index와 두번째 값에는 그 위치에 들어갈 값을 넣어주면 돼요.
입력
a.insert(2, 10000000) a
 
출력
[10, 1, 10000000, 1, 11, 2, 23, 12]
 

1.2.8 pop

리스트 맨 마지막에 있는 값을 리턴해주는 메서드입니다. 파라미터로 뽑을 값의 위치를 정해줄 수도 있어요.
실행 후에는 해당 값이 사라지게 됩니다.
입력
print(a.pop()) print(a.pop(2)) a
 
출력
12 10000000 [10, 1, 1, 11, 2, 23]
 

1.2.9 remove

어떤 값을 삭제해주는 메서드입니다. 여러 값들이 중복되어 있을 경우 전체 값을 삭제하는 것이 아닌 처음 만난 값만 삭제되니 이 부분 유의해주세요! 모두 삭제하고 싶으면 앞에서 배웠던 count와 뒤에서 배울 for문을 이용하여 count만큼 반복해서 값을 삭제해야 합니다. 아직 반복문을 배우지 않았으니 이 부분은 넘어가도록 할게요.
입력
a = [1, 1, 1, 2, 3, 2, 1, 2] a.remove(1) a
 
출력
[1, 1, 2, 3, 2, 1, 2]
 

1.2.10 reverse

리스트를 뒤집는 메서드입니다. 역정렬이 아니라 역순으로 리턴됩니다.
입력
a = [1, 2, 3, 4, 5, 1, 2] a.reverse() a
 
출력
[5, 4, 3, 2, 1, 2, 1]
 

1.2.11 sort

리스트를 정렬시켜주는 메서드입니다. 리스트의 역정렬을 하고 싶으면 sort를 한 뒤 reverse를 사용해주면 되겠죠?
입력
a.sort() a
 
출력
[1, 1, 2, 2, 3, 4, 5]