티스토리 뷰
📌 [리스트]
배열처럼 여러 값을 한 번에 저장하기 위해 리스트를 사용한다.
리스트는 말 그대로 목록이라는 뜻이고, 값을 일렬로 늘어놓은 형태이다.
📍 데이터 형에 상관없이 여러 값을 저장할 수 있다 = 모든 객체의 시퀀스
📍 리스트와 리스트 사이의 덧셈이 가능하다. ( extend메서드와 같은 역할 )
📍 리스트 명으로 출력 시 [대괄호]까지 출력된다.
📍 첨자를 사용해 리스트에 저장된 값에 접근할 수 있다 (리스트 길이보다 큰 index를 사용하려고 하면 에러 발생)
👉 리스트 만들기 (리스트 패킹)
✔ 리스트 패킹 : 여러 데이터를 리스트로 묶는 것 ↔ 리스트 언패킹 : 리스트로 묶은 데이터 뿌리기
listA = [ 1, 2, 3, 4, 5 ]
profile = ['짱구', 5, '해바라기반', 130.5 ]
✔ 리스트에 값을 저장할 때에는 대괄호로 묶어준다. 각 값은 콤마로 구분.
✔ 슬롯(Slot) : 데이터를 저장하기위한 자리
✔ 요소(Element) : 슬롯에 저장된 개별 데이터
✔ 모든 객체의 시퀀스 = 모든 객체를 요소로 받을 수 있다 (함수, 튜플, 리스트, 변수, 정수 등... )
✔ 시퀀스 자료형(sequence types) : 리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형
fruit = ['apple', 'banana', 'orange']
numbers = list(range(10))
str = input() #hello 입력
list_str = list(str) #문자열을 list로 형변환해서 저
print(list_str) #['h', 'e', 'l', 'l', 'o'] 출력
✔ 대괄호를 사용해서 리스트를 생성하기도 하고
✔ list로 형 변환해서 리스트를 생성, 데이터를 저장할 수 도 있다.
listB = []
listC = list()
print(listB) #[]
print(listC) #[]
✔ 대괄호에 값을 넣지 않거나 list()만 사용하면 비어있는 리스트를 만들 수 있다.
listD = list(range(10))
print(listD) #[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
listE = list(range(5,12,2))
print(listE) #[ 5, 7, 9, 11 ]
listE = list(range(12,2,-3))
print(listE) #[12, 9, 6, 3 ]
✔ range()는 연속된 숫자를 생성하는 함수.
✔ list의 크기에 정수 대신, range(10)을 넣으면 0~9의 값이 저장된 리스트가 만들어진다.
✔ range()에 인수를 하나만 사용하면 0부터~end로 인식.
✔ range()에 start값과 end, step을 지정해주면 조건에 맞는 값이 저장된다.
👉 리스트 언패킹
list = [1,2,3]
#n1, n2 = list #ERROR!
n1, n2, n3 = list
print(list)
print('n1 = {0}, n1 = {1}, n1 = {2}'.format(n1,n2,n3))
✔ [리스트]의 데이터를 변수 여러개에 한번에 저장할 수 있다.
✔ 언패킹할 요소의 수가 불일치하면 오류가 발생하니 주의하자
👉 리스트를 조작하는 메서드
메서드 | 설명 | |
추가 |
.append() | 마지막 요소의 뒤에 요소 하나 추가 |
.insert() | 특정 위치(index)에 요소 추가 | |
.extend() | 마지막 요소의 뒤에 또 다른 리스트 연결하여 결합 | |
+ | 메서드는 아니지만, 더하기 연산을 통해 결합 가능 | |
삭제 | .pop() | 특정 위치의 요소 삭제 |
del 리스트[idx] | 특정 위치의 요소 삭제 | |
.remove() | 특정 값을 가지는 요소 삭제 | |
.clear() | 모든 요소 삭제 | |
검색 | .index() | 특정 값을 가진 요소 중 가장 첫번째의 요소의 인덱스 |
.count() | 특정 값을 가진 요소 개수 세기 | |
정렬 |
.sort() | 요소를 오름차순으로 정렬 |
sorted(리스트) | 요소를 오름차순으로 정렬 (정렬된 새로운 리스트를 반환) | |
.reverse() | 요소의 순서를 역순으로 변경 | |
길이 | len(리스트) | 길이 (요소의 개수) 구하기 |
👉 리스트 : 추가 메서드
1. append()
listA = [ 0, 1, 2, 3, 4 ]
#append : 요소 하나를 추가
listA.append(100)
print(listA)
✔ 리스트명.append(요소)는 리스트 마지막 idx에 요소를 하나 추가한다.
2. insert()
listA = [ 0, 1, 2, 3, 4 ]
#insert : 특정 인덱스에 요소 추가
listA.insert(3, 100)
print(listA)
listA.insert(len(listA),[200,300])
print(listA)
✔ insert() 메서드는 인수를 2개 가지며, 첫 번째 인수는 index를 의미하고 두 번째 인수는 해당 index에 저장할 값을 의미한다.
✔ 리스트 마지막 인덱스 뒤에 요소를 추가할 때에는, 첫 번째 인수에 len()을 사용하는 편을 추천.
✔ 리스트 내부에 또 다른 리스트를 추가할 수도 있으며, 이는 중첩 리스트라고 한다.
✔ 중첩 리스트는 말하자면 트리(Tree)구조를 가진다.
listA = [ 0, 1, 2, 3, 4 ]
listA[0:2] = [100,200]
print(listA)
listA[0:4] = [100,200]
print(listA)
listA[1:1] = [500,600]
print(listA)
✔ 리스트명과 첨자를 사용해 원하는 지점을 지정, 새로운 값을 추가할 수 있다.
✔ 기본적으로 첨자를 사용한 데이터의 추가는 덮어쓰기를 의미한다.
✔ 첨자 내부에 start와 end의 값이 동일하면, 해당 위치의 요소를 덮어쓰지 않으면서 요소를 중간에 추가할 수 있다.
✔ end 위치는 포함되지 않으므로, 첨자를 [0:5] 형태로 사용하면 index 0부터 4까지를 의미한다.
✔ 첨자의 범위에 비해 값의 개수가 적다면, 해당 첨자 범위의 값은 모두 삭제되고 입력한 값이 저장된다.
3. extend()
listA = [ 0, 1, 2, 3, 4 ]
listB = [ 5, 6, 7, 8, 9 ]
#extend : 리스트를 연결하여 확장
listA.extend(listB)
print(listA)
✔ extend 메서드를 호출한 리스트의 뒤에 인수로 받아온 리스트를 연결한다.
✔ listB를 물리적으로 가져와 listA의 뒤에 붙이는 것이 아니라, listB의 값을 복사해서 저장하는 역할을 한다.
listA = [ 0, 1, 2, 3, 4 ]
listB = [ 5, 6, 7, 8, 9 ]
# + 연산자를 사용한 결합
listC = listA+listB
print(listC)
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
✔ 더하기 연산자를 사용해 extend메서드처럼 리스트를 결합할 수 있다.
👉 리스트 : 삭제 메서드
1. pop(), del arr[idx]
listA = [ 0, 1, 2, 3, 4 ]
listA.pop()
print(listA)
listA.pop(0)
print(listA)
del listA[2]
print(listA)
✔ pop() 은 마지막 요소를 하나 삭제하는 메서드이며, 특정 인덱스를 지정해 삭제할 수 도 있다.
✔ del 키워드와 첨자를 사용해서 원하는 위치의 요소를 하나 삭제할 수 있다. pop()과 같은 기능을 수행한다
2. remove()
listA = [ 0, 1, 2, 3, 4, 2 ]
listA.remove(2)
print(listA)
✔ remove() 메서드를 사용하면 특정 값을 찾아 리스트에서 삭제할 수 있다.
✔ 같은 값의 요소를 여러개 가진다면, 가장 처음 찾은 인덱스의 값만 삭제한다.
3. clear()
listA = [ 0, 1, 2, 3, 4, 2 ]
listA.clear()
print(listA)
✔ 리스트 내부의 모든 값을 삭제한다.
👉 리스트 : 검색 메서드
1. index()
listA = [ 0, 1, 2, 3, 4, 2, 2 ]
idx = listA.index(2)
print(idx)
✔ index() 메서드는 리스트에서 특정 값의 인덱스를 구한다. 같은 값이 여러 개인 경우 처음 찾은 인덱스를 반환한다.
2. count()
listA = [ 0, 1, 2, 3, 4, 2, 2 ]
cnt = listA.count(2)
print(cnt)
✔ count() 메서드는 리스트에서 특정 값의 개수를 구한다.
👉 리스트 : 정렬 메서드
1. sort()
listA = [ 60, 10, 200, 37, 34, 72, 322 ]
listA.sort()
print(listA)
✔ sort() 메서드는 리스트의 요소들을 작은 순서대로 정렬한다 (오름차순)
listA = [ 60, 10, 200, 37, 34, 72, 322 ]
listA.sort(reverse = True)
print(listA)
✔ sort() 메서드에 인자를 reverse = True를 넣으면 역순으로 정렬하라는 의미이다. (내림차순)
2. reverse()
listA = [ 60, 10, 200, 37, 34, 72, 322 ]
listA.sort()
print(listA)
listA.reverse()
print(listA)
✔ reverse() 메서드는 리스트의 요소의 순서를 반대로 뒤집는다.
3. sorted() 함수
listA = [ 60, 10, 200, 37, 34, 72, 322 ]
listB = sorted(listA)
print(listA)
print(listB)
✔ 내장 함수 sorted 는 정렬을 한 뒤, 새로운 리스트를 생성한다. 어딘가에 저장하지 않으면 사용할 수 없다.
👉 리스트 : 슬라이싱 사용하기
1. 슬라이싱
listA = [ 60, 10, 200, 37, 34, 72, 322 ]
listA[len(listA):] = [500]
print(listA)
✔ 리스트는 메서드 없이 슬라이싱로 조작할 수 있다.
✔ 위와 같이 대괄호 안에서 len()을 사용해 마지막 요소+1 index에 새로운 리스트를 추가할 수 있다.
👉 리스트 : 반복문에서 사용하기
numbers = [ 1,2,3,4,5,6,7,8 ]
#for문
for i in numbers :
print(i, end=' ')
print()
#while문
length = len(numbers)
i = 0
while i<length :
print(numbers[i], end=' ')
i+=1
👉 2차원 리스트
num = [ [2,3,4,5] , [6,7,8,9] ]
print(num[0]) #[2,3,4,5]
print(num[1]) #[6,7,8,9]
print(num[0][0]) # 2
print(num[1][0]) # 6
✔ 파이썬에서도 부분 배열명을 사용할 수 있다. 부분 배열명을 사용하면 해당 1차원 배열에 접근할 수 있다.
※참고※
[참고] 엘리스 트랙-혼자 공부하는 파이썬 / 길벗-파이썬 코딩 도장 / 엘리스 트랙 - 예제 중심의 파이썬 입문 / 위키백과
'BackEnd > Python' 카테고리의 다른 글
[파이썬 기초] 02-3. {딕셔너리} (0) | 2021.03.18 |
---|---|
[파이썬 기초] 02-2. (튜플) (0) | 2021.03.18 |
[파이썬 기초] 01-5. 조건문 / 반복문 (0) | 2021.03.16 |
[파이썬 기초] 01-4. 비트 연산자 / 논리 검증 (0) | 2021.03.16 |
[파이썬 기초] 01-3. 문자열 / 문자열 메소드 / 입출력함수 (0) | 2021.03.16 |