[Python] 리스트
20 Jan 2020
Reading time ~5 minutes
리스트(list)
는 복수개의 값을 담을 수 있는 데이터 구조입니다.
리스트의 생성
(1) [ ] 안에 값을 담아서 생성하기
a = []
print(a)
# 출력:
[]
a = [1, 2, 3, 5, 10]
print(a)
# 출력:
[1, 2, 3, 5, 10]
a = ['korea', 'canada', 1, 2, [34, 56]]
print(a)
# 출력:
['korea', 'canada', 1, 2, [34, 56]]
(2) list( ) 함수 사용하기
다른 데이터 타입을 리스트로 변환할 때 사용할 수 있습니다.
# 문자열에다가 list함수를 쓰면 문자열 개별 값들을 가진 리스트로 반환한다.
a = 'hello world'
b = list(a)
print(b)
# 출력:
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
c = (1, 2, 3)
d = list(c)
print(d)
# 출력:
[1, 2, 3]
(3) string.split( ) 함수 사용하기
구분자로 구분되는 리스트를 반환합니다.
a = 'hello world nice weather'
b = a.split()
print(b)
# 출력:
['hello', 'world', 'nice', 'weather']
리스트 인덱싱
문자열의 인덱싱과 동일합니다. 역시 0부터 인덱스가 시작합니다.
a = [1, 2, 3, 4, 5, 6]
print(a[3])
print(a[5])
print(a[-1])
print(a[2:5])
# 출력:
4
6
6
[3, 4, 5]
리스트의 인덱스를 이용해 개별 값에 접근하여 값을 업데이트 할 수 있습니다.
a = [1, 2, 3, 4, 5]
a[0] = 100
a[-1] = 90
print(a)
# 출력:
[100, 2, 3, 4, 90]
※ 문자열의 경우에는 인덱스를 통해 개별 값에 접근해도 값을 바꿀 수 없습니다.
# 문자열은 인덱싱으로 값을 바꿀수 없어(불변개체) 오류가 발생합니다.
a = 'hello world'
print(a[0])
a[0] = 'j'
# 오류문구 : 'str' object does not support item assignment.
# 문자열을 바꾸려면 아예 새로 생성하거나 아래와 같은 방법으로 바꿔야한다.
a = 'hello world'
b = 'jello world'
print(b)
c = 'j'+a[1:]
print(c)
d = a.replace('h','j')
print(d)
# 출력:
jello world
jello world
jello world
리스트의 슬라이싱
역시 문자열의 슬라이싱과 동일하게 동작하며 그 결과 또한 리스트입니다.
a = [1, 2, 3, 4, 5, 6, 7, 8]
print(a[4:7])
print(a[:7])
print(a[3:])
print(a[:])
# 출력:
[5, 6, 7]
[1, 2, 3, 4, 5, 6, 7]
[4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
슬라이싱을 할 때, 인덱스 값을 일반적으로 두 개를 입력하는데 사실 그 뒤에 하나가 더 숨어있습니다.
start:end:increment
(increment : 건너뛰는 숫자로 default는 1)
a = [1, 2, 3, 4, 5, 6, 7, 8]
print(a[1:7:1])
print(a[1:7:2])
print(a[1:7:3])
print(a[1:7:4])
# 출력:
[2, 3, 4, 5, 6, 7]
[2, 4, 6]
[2, 5]
[2, 6]
리스트 멤버 함수
생성된 리스트 개별 객체에 동작하는 함수입니다.
(1) append( )
리스트의 끝에 값을 추가합니다.
a = [1, 2, 3, 4, 5]
a.append(10)
print(a)
# 출력:
[1, 2, 3, 4, 5, 10]
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 만드려고할 때
# append를 사용하면 아래와 같이 잘못 만들어집니다.
a.append(b)
print(a)
# 출력:
[1, 2, 3, 4, 5, [6, 7, 8, 9, 10]]
(2) extend( )
리스트를 연장하는 기능입니다. 이 함수는 리스트 두 개를 연결 할 수도 있습니다.+=
로 동일한 기능을 수행할 수 있습니다.
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 만들기
a.extend(b)
print(a)
# 출력:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
# += 로도 extend( )와 동일한 기능을 수행할 수 있습니다.
a += b
print(a)
# 출력:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(3) insert( )
리스트의 원하는 위치에 값을 추가할 수 있습니다.
# 사용법
list.insert(index, 추가하려는 값)
a = [1, 2, 3, 4, 5]
a.insert(1, 40)
print(a)
# 출력:
[1, 40, 2, 3, 4, 5]
(4) remove( )
리스트 내 특정 값을 삭제합니다. 중복되는 값이 있으면 처음에 있는 값만 삭제합니다.
a = [1, 2, 30, 4, 5]
a.remove(30)
print(a)
# 출력:
[1, 2, 4, 5]
# 동일 값이 복수 있으면 앞에 있는 값만 지운다
a = [30, 1, 2, 30, 4, 5]
a.remove(30)
print(a)
# 출력:
[1, 2, 30, 4, 5]
(5) pop( )
지우고자 하는 위치(인덱스)의 값을 반환 후 삭제합니다. 아무것도 입력하지 않으면 제일 마지막 값을 지웁니다.
a = [1, 2, 3, 4, 5]
d = a.pop() # 아무것도 입력하지 않으면 마지막 것을 지운다
print(a)
print(d)
# 출력:
[1, 2, 3, 4]
5
a = [1, 2, 3, 4, 5]
d = a.pop(2) # 인덱스를 입력하면 해당 인덱스 값을 지운다
print(a)
print(d)
# 출력:
[1, 2, 4, 5]
3
(6) index( )
찾고자 하는 값의 인덱스를 반환합니다.
a = [2, 6, 7, 8, 10]
a.index(6)
# 출력:
1
(7) in 키워드
리스트 내 해당 값이 존재하는지 확인합니다. 그 결과는 True, False로 반환됩니다.
# 사용법
찾으려는값 in [리스트]
a = [1, 2, 3, 4, 5, 10]
b = 7
d = 5
print(b in a)
print(d in a)
# 출력:
False
True
(8) 정렬기능
- sort( ) : 리스트 자체를 내부적으로 정렬합니다. 정렬 결과를 출력하지는 않습니다.
- sorted( ) : 정렬된 복사본을 반환할 뿐, 리스트 자체는 그대로입니다.
a = [9, 10, 7, 19, 1, 2, 20, 21, 7, 8]
a.sort()
print(a)
# 출력:
[1, 2, 7, 7, 8, 9, 10, 19, 20, 21]
a = [9, 10, 7, 19, 1, 2, 20, 21, 7, 8]
a.sort(reverse=True) # 역순 정렬
print(a)
# 출력:
[21, 20, 19, 10, 9, 8, 7, 7, 2, 1]
a = [9, 10, 7, 19, 1, 2, 20, 21, 7, 8]
sorted(a)
#sorted를 사용하면 해당 리스트 변수 자체가 변하진 않음
print(a)
# 출력:
[1, 2, 7, 7, 8, 9, 10, 19, 20, 21]
[9, 10, 7, 19, 1, 2, 20, 21, 7, 8]
Reference
- 패스트캠퍼스 파이썬 강의
- 점프투파이썬 (https://wikidocs.net/book/1)