리스트(List) 타입은 파이썬의 자료구조 형태 중 하나로 원소들이 연속적으로 저장되는 형태의 자료형이다. 리스트를 만드는 방법에는 2가지가 있다. '대괄호'와 'list()'를 이용한 방법이다.
✨ 다음은 리스트를 구현한 코드이다.
a = [1,2,3,4]
b = ['h','i']
c = ['hello']
d = list('hello')
print(d)
#print결과
['h', 'e', 'l', 'l', 'o']
리스트는 자리 번호표를 가지고 있다. 즉, 문자열처럼 인덱싱과 슬라이싱이 가능하다.
리스트의 인덱싱은 리스트의 자리번호(index)를 이용해 원하는 자리의 값을 뽑아내는 것이다.
파이썬은 숫자를 0부터 세기 때문에 a[0]이 리스트의 첫 번째 요소이다.
✨ 다음은 리스트의 인덱싱을 구현한 코드이다.
a = [1,2,3]
print(a[0])
print(a[1])
print(a[2])
#print 결과
1
2
3
이번에는 리스트 안에 리스트 ['a', 'b', 'c']를 요소로 넣어보자.
마지막 요소는 [-1]로 표현될 수 있다.
✨ 다음은 이중 리스트에서 인덱싱을 구현한 코드이다.
a = [1,2,3,['a', 'b', 'c']]
print(a[-1])
#print결과
['a', 'b', 'c']
a 리스트에서 'b'를 끄집어내려면 어떻게 해야할까?
'b'는 리스트a의 [-1]안의 [1]자리에 있다.
print(a[-1][1])
#print 결과
'b'
인덱싱을 통한 리스트 값끼리의 연산도 가능할까?
단, 리스트끼리의 연산과 인덱싱을 통한 연산은 의미가 다르다는 것을 유의해야 한다.
✨ 다음은 리스트 인덱싱을 통한 연산을 구현한 코드이다.
a = [1, 2, 3]
print(a[0] + a[2])
#print 결과
4
✨ 다음은 리스트의 슬라이싱을 구현한 코드이다.
a = [1, 2, 3, 4, 5]
print(a[1:4])
#print 결과
[2, 3, 4]
💡 index 1번부터 3번까지를 슬라이싱하는데 왜 a[1:3]이 아닌 a[1:4]일까?
인덱스의 슬라이싱은 앞의 예시처럼 a[1:4]에서 4번째 인덱스를 포함하지 않고 가져온다.
즉, 4미만인 4-1 = 3번 index까지만 가지고 온다는 뜻이다.
리스트가 포함된 중첩된 리스트 역시 슬라이싱을 적용할 수 있다.
✨ 다음은 중첩 리스트의 슬라이싱을 구현한 코드이다.
a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
print(a[3][:2])
#print 결과
['a', 'b']
✨ 다음은 슬라이싱을 여러가지 방법으로 구현한 코드이다.
a = [1, 2, 3, 4, 5, 6]
print(a[3:]) # 3번 index부터 끝까지
print(a[:3]) # 3번 index미만까지(2번 index까지)
print(a[1:5:2]) # 1번 index이상 5번 index미만 2개씩
print(a[::-1]) # 거꾸로
print(a[:]) # 처음부터 끝까지
#print 결과
[4, 5, 6]
[1, 2, 3]
[2, 4]
[6, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 6]
리스트는 문자열과 마찬가지로 + 기호를 사용해 더하거나 * 기호를 사용해 반복할 수 있다.
리스트 사이에서 + 기호는 2개의 리스트를 합치는 기능을 한다.
✨ 다음은 리스트 간 덧셈을 구현한 코드이다.
a = [1, 2, 3]
b = [4, 5, 6]
print(a+b)
#print 결과
[1, 2, 3, 4, 5, 6]
리스트 사이에서 * 기호는 반복하여 새로운 리스트를 만들어낸다.
✨ 다음은 리스트 간 곱셈을 구현한 코드이다.
a = [1, 2, 3]
print(a*3)
#print 결과
[1, 2, 3, 1, 2, 3, 1, 2, 3]
위에서 배운 인덱싱과 슬라이싱을 통해 리스트를 수정하고 삭제할 수 있다.
리스트[N] = 값
✨ 다음은 인덱싱(indexing)을 이용해 리스트 값을 수정한 코드이다.
a = [1, 2, 3]
a[2] = 4
print(a)
#print 결과
[1,2,4]
리스트 인덱싱과 슬라이싱을 이용해 특정 범위 혹은 특정 요소를 삭제할 수 있다.
이 때, del 함수를 이용한다.
✨ 다음은 del 함수를 이용해 리스트의 특정 범위 혹은 특정 요소를 삭제한 코드이다.
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]
del(a[1]) # 리스트 a의 1번 index 삭제
del(b[:4]) # 리스트 b의 0번 index부터 3번 index까지 삭제
print(a)
print(b)
#print 결과
[1, 3, 4, 5][5]
append 함수는 리스트의 끝에 x 값을 추가하는 함수이다.
✨ 다음은 append 함수를 구현한 코드이다.
a = [1, 2, 3]
a.append(4)
print(a)
#print결과
[1, 2, 3, 4]
insert 함수는 리스트의 a 위치에 b 값을 추가하는 함수이다.
✨ 다음은 insert 함수를 구현한 코드이다.
a = [1, 2, 3]
a.insert(0, 0)
print(a)
#print 결과
[0, 1, 2, 3]
remove 함수는 리스트의 특정 값 x를 찾아서 제거하는 함수이다.
✨ 다음은 remove 함수를 구현한 코드이다.
a = [1, 2, 3, 3, 4, 5]
a.remove(1)
print(a)
#x가 리스트에 여러개 있을 경우
a.remove(3)
print(a)
#x가 리스트에 존재하지 않는 경우
a.remove(6)
print(a)
#print 결과
[2, 3, 3, 4, 5] # 1 제거
[2, 3, 4, 5] # 맨 처음 3 제거 (모든 3을 제거하지 않는다.)
Error # 에러
💡 x가 리스트에 여러개 있다면, 모든 x가 아닌 맨 처음 x만 지운다.
pop 함수는 리스트 가장 뒤에 있는 값을 반환한 후에 리스트에서 해당 값을 삭제하는 함수이다.
✨ 다음은 pop 함수를 구현한 코드이다.
a = [1, 2, 3, 4, 5]
b = a.pop()
print(a)
print(b)
#print 결과
[1, 2, 3, 4][5]
💡 b = a.pop()에서 a의 마지막 요소를 b에 반환 후 a에서 해당값을 삭제한다.
extend 함수는 확장 함수로 리스트2를 연결해주는 함수이다.
(list2)에는 반드시 리스트형이 와야한다.
✨ 다음은 extend 함수를 구현한 코드이다.
a = [1, 2, 3]
b = [4, 5, 6]
#리스트a에 리스트b 연결
a.extend(b)
print(a)
#리스트a에 리스트[7,8] 연결
a.extend([7,8])
print(a)
#print 결과
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7, 8]
count 함수는 리스트 요소들 중 x와 같은 값이 몇 개 있는지 개수를 세는 함수이다.
✨ 다음은 count 함수를 구현한 코드이다.
a = [1, 2, 3, 4, 4, 4, 5]
print(a.count(4))
#print 결과
3
index 함수는 리스트 요소 중 x의 위치를 index로 반환하는 함수이다.
✨ 다음은 index 함수를 구현한 코드이다.
a = [1, 2, 3, 3, 4, 5, 6]
print(a.index(2))
print(a.index(3))
print(a.index(7))
#print 결과
1
2
Error
💡 리스트에 x가 여러개 있을 경우 맨 처음 찾은 x의 위치를 반환한다. x가 없을 경우 Error가 발생한다.
sort 함수는 리스트의 내부 요소를 오름차순으로 정렬해주는 함수이다.
sort 함수를 사용하기 위해서는 내부 자료형이 int 혹은 str로 타입이 통일되어 있어야 한다.
비교 불가능한 값들은 정렬도 불가능하다.
✨ 다음은 sort 함수를 구현한 코드이다.
a = [1, 4, 2, 3]
b = [1, 'a', 2]
c = ['b', 'a', 'c']
a.sort()
b.sort()
c.sort()
print(a)
print(b)
print(c)
#print 결과
[1, 2, 3, 4]
Error
['a', 'b', 'c']
💡 리스트b의 요소는 비교불가능한 요소들이므로(통합x) Error가 발생한다.
reverse 함수는 리스트 내부 요소들을 전체 뒤집는다. (반환x)
✨ 다음은 reverse 함수를 구현한 코드이다.
a = [1, 2, 3]
a.reverse()
print(a)
#print 결과
[3, 2, 1]
copy 함수는 리스트를 복사하고 반환하는 함수이다.
✨ 다음은 copy 함수를 구현한 코드이다.
a = [1, 2, 3]
b = a.copy()
print(a)
print(b)
print(id(a))
print(id(b))
#print 결과
[1, 2, 3]
[1, 2, 3]
2172001242240
2172001245760
💡 a와 b의 아이디가 다르므로 복사했으나 서로 다른 리스트인 것을 알 수 있다.
clear 함수는 리스트 내부의 모든 요소들을 삭제하는 함수이다.
리스트 자체를 삭제하는게 아닌 내부 요소들만 삭제하기에 리스트 객체 자체는 남아 있다.
즉, 비어있는 리스트가 된다.
✨ 다음은 clear함수를 구현한 코드이다.
a = [1, 2, 3]
a.clear()
print(a)
#print 결과
[]
리스트에서 주로 쓰이는 파이썬의 내장함수에는 len, max, min, list가 있다.
len 내장함수는 리스트, 튜플, 문자열, 딕셔너리 등을 입력받아 해당 객체의 원소개수를 반환하는 함수이다.
✨ 다음은 len함수를 구현한 코드이다.
a = [1, 2, 3]
print(len(a))
#print 결과
3
max 내장함수는 입력값 혹은 객체의 원소 중 최댓값을 반환하는 함수이다.
✨ 다음은 max함수를 구현한 코드이다.
a = [1, 2, 3]
print(max(a))
#print 결과
3
min 내장함수는 입력값 혹은 객체의 원소 중 최솟값을 반환하는 함수이다.
✨ 다음은 min함수를 구현한 코드이다.
a = [1, 2, 3]
print(min(a))
#print 결과
1
list 내장함수는 문자열이나 튜플을 입력받은 후 리스트 객체로 만들고 해당 리스트를 반환하는 함수이다.
✨ 다음은 list함수를 구현한 코드이다.
a = list('hello')
b = list((1,2,3))
print(a)
print(b)
#print 결과
['h', 'e', 'l', 'l', 'o'][1, 2, 3]