KDT_4기 파이썬 기초 0923(3)
2024.09.23 수업 내용 복습일기 세번째
이번에는 컬렉션 타입 리스트에 대해 알아보자
1. 컬렉션 타입
여러 개의 데이터 항목을 하나의 단위로 관리할 수 있게 해주는 데이터 구조를 의미합니다. 이것은 여러 개의 데이터를 하나의 변수에 저장하고, 관리할 수 있게 해줍니다. 파이썬에서는 리스트, 튜플, 세트, 딕셔너리 등이 기본적인 컬렉션 타입에 속합니다.
2. 리스트
리스트는 여러 값들을 하나의 변수에 저장하고 관리할 수 있게 해주는 순차적인 자료구조입니다.
생성
리스트는 대괄호 [ ]를 사용하여 생성하며, 내부에 포함된 각 항목들은 쉼표로 구분됩니다.
li1 = [1,3,5,7,9]
print(li1)
print(li1[0])
print(type(li1))
li2 = list([1, 3, 5, 7, 9]) #list클래스를 통해 리스트 만들기 컬렉션끼리의 성질을 바꾸기 편하여 사용
print(li2)
print(type(li2))
li3 = ['김사과', '반하나', '오렌지', '이메론']
print(li3)
리스트는 서로 다른 타입의 데이터를 저장할 수 있으며, 다른 타입의 데이터를 한 리스트 안에 넣어도 타입이 통일 되지 않고 각각 맞는 타입이 나옵니다.
li4 = [1, 50.5, '김사과', True] # 각자 타입이 다른 데이터를 저장
print(li4)
print((li4[0]))
print((li4[1]))
print((li4[2]))
print((li4[3]))
print(type(li4))# 리스트 안에 다른 타입의 데이터를 넣어도 하나로 통일되지 않고 각각 맞는 타입이 나옴
print(type(li4[0]))#인덱싱
print(type(li4[1]))
print(type(li4[2]))
print(type(li4[3]))
인덱싱
리스트의 각 항목은 위치(인덱스)를 가지고 있으며, 인덱스를 사용하여 접근할 수 있습니다. 인덱스는 0부터 시작합니다.
-n을 인덱싱하면 역순으로 인덱싱합니다.
li1 = [1,3,5,7,9]
print(li1)
print(li1[2])
print(li1[-1])
print(li1[2]+li1[-1])
2차원 리스트는 리스트 안에 리스트를 넣어서 만들 수 있으며 안쪽의 각 리스트는 ,(콤마)로 구분합니다.
- 리스트 = [[값, 값], [값, 값], [값, 값]]
2차원 리스트의 요소에 접근하거나 값을 할당할 때는 리스트 뒤에 [ ](대괄호)를 두 번 사용하며 [ ] 안에 세로(row) 인덱스와 가로(column) 인덱스를 지정해주면 됩니다.
- 리스트[세로인덱스][가로인덱스]
- 리스트[세로인덱스][가로인덱스] = 값
li2 = [1,2,'파이썬',['김사과','오렌지']]#리스트 자체가 요소로 감
print(li2)
print(li2[3])
print(li2[3][0])
print(li2[3][1])
print(li2)
print(type(li2))
print(li2[1])
print(type(li2[1]))
print(li2[2])
print(type(li2[2]))
print(li2[3])
print(type(li2[3]))
print(li2[3][1])
print(type(li2[3][1]))
인덱싱을 하면 차원이 하나 낮아지는데 print() 로 출력해서 아래와 같이 확인 할 수 있다
li3 = [1,2,3,['김사과','오렌지','반하나',['🍕', '🍔', '🥓', '🥨']]]
print(li3)
print(li3[2])
print(li3[-1])
print(li3[-1][-2])
print(li3[-1][-1][-2])#인덱싱을 하면 차원이 하나 낮아짐 []이 인덱싱 하나마다 사라짐
3. 슬라이싱
리스트의 일부분만을 추출할 수 있습니다.
li1 = [1,3,5,7,9]
print(li1)
print(li1[0:3])#슬라이싱
변경 가능
리스트의 항목들은 변경할 수 있습니다. 즉, 리스트의 항목들을 수정, 추가, 삭제할 수 있습니다.
li2 = li1
print(li2)
li2[0] = 100
print(li2)
print(li1)
슬라이싱을 하면 인덱싱과 달리 차원이 낮아지지 않습니다
li3 = [1,2,3,['김사과','오렌지','반하나',['🍕', '🍔', '🥓', '🥨']]]
print(li3[2:3])
print(li3[3][:2])
슬라이싱을 이용해 리스트 요소를 추가하면 리스트 안에 데이터만 포함하게 됩니다
li4 = [10,20,30,40,50]
# 슬라이싱을 이용하여 리스트 요소를 추가한 경우 리스트안에 데이터만 포함
li4[1:2] = ['😁','😂','😎','😍']
print(li4)
인덱싱을 이용한 데이터 추가는 리스트 안에 리스트를 포함하게 됩니다
li4 = [10,20,30,40,50]
# 인덱싱을 이용하여 리스트 데이터를 추가한 경우 리스트 안에 리스트를 포함
li4[1] = ['😁','😂','😎','😍']
print(li4)
리스트 요소 위치에 슬라이싱하여 빈 리스트를 저장하면 해당 요소가 삭제됩니다
li4 = [10, 20, 30, 40, 50]
print(li4[1:3])
li4[1:3] = [] # 빈 리스트를 저장하면 요소가 삭제됨
print(li4)
인덱싱을 통해서도 가능하지만 아래처럼 리스트 껍데기가 남게됩니다
li4 = [10, 20, 30, 40, 50]
print(li4[1:2])
print(li4[1])
li4[1] = []
print(li4)
del을 사용하면 인덱싱으로도 깔끔하게 요소가 삭제됩니다
li4 = [10, 20, 30, 40, 50]
del li4[1]
print(li4)
연산
리스트 간의 + 연산으로 리스트를 결합할 수 있고, * 연산으로 리스트를 반복할 수 있습니다.
li5 = [10,20,30]
li6 = li5 + [40,50,60] #[10,20,30] + [40,50,60]
print(li6)
li6 = [10,20,30]
li6 += [40,50,60] # li6 = li6 +[40,50,60]
print(li6)
li6 = [10,20,30]
print(li6*3)
3. 리스트의 메서드
len(): 객체의 길이(항목의 개수)를 반환하는 내장 함수이다
#len(): 객체의 길이를 반환하는 파이썬의 기본 내장 함수
li6 = [10,20,30]
print(len(li6))
append(): 리스트에 사용되며, 리스트의 끝에 새로운 항목을 하나만 추가하는 메서드이다
두개 이상은 리스트 형식으로 넣어야 오류가 생기지 않는다.
li6 = [10,20,30]
print(li6)
# append(): 리스트 요소의 끝에 새로운 요소를 추가
li6.append(100)
print(li6)
#li6.append(200, 300) 오류
li6.append([200, 300])
print(li6)
extend(): 리스트에 iterable(반복 가능한 객체)의 모든 항목을 추가하는 메서드이다
# extend(): 리스트 요소의 끝에 새로운 여러 요소를 추가
li6 = [10,20,30]
print(li6)
#li6.extend(100) 오류
li6.extend([100])
print(li6)
li6.extend([200,300,400])
print(li6)
pop(): 리스트에서 항목을 삭제하고, 삭제된 항목을 반환하는 메서드이다
li6 = [10,20,30]
# pop(): 리스트에서 마지막 요소을 삭제하고, 삭제된 요소를 반환하는 메서드
print(li6)
print(li6.pop())
print(li6)
temp = li6.pop()
print(temp)
print(li6)
index(): 리스트에서 특정 값의 인덱스를 반환하는 메서드이다. 특정 값의 인덱스가 없다면 에러가 발생한다
li6 = [10,20,30]
print(li6)
# index(): 리스트에서 특정 요소의 값 인덱스를 반환
print(li6.index(30))
#print(li6.index(100)) 값이 없으면 오류
print(li6)
reverse(): 리스트의 항목들의 순서를 뒤집는 메서드이다
li7 = [100,50,70,60,20]
print(li7)
# reverse(): 리스트의 항목들의 순서를 뒤집는 메서드
li7.reverse()
print(li7)
#슬라이싱을 사용하여 리스트 요소들의 순서를 반대로 설정하는 방법
li7 = [100,50,70,60,20]
print(li7[:])#[0:5]
print(li7[0:5])# step이 생략
print(li7[::])# step의 기본값은 1
print(li7[0:5:2])# step을 2로 설정
li7 = [100,50,70,60,20]
print(li7[::-1])# step을 -1로 설정 거꾸로 나옴
#step이 -1일 경우 start의 기본값은 -1 stop의 기본값은 0으로 설정
print(li7[1::-1])
print(li7[:0:-1])
sort(): 리스트의 항목들을 정렬하는 메서드. inplace 연산을 수행합니다
sort(reverse=True) 를 사용하면 내림차순으로 정렬합니다
li7 = [100,50,70,60,20]
# sort(): 리스트의 항목들을 오름차순으로 정렬하는 메서드. inplace 연산을 수행
li7.sort() # 오름차순
print(li7)
# sort(reverse=True) # 내림차순
li7.sort(reverse=True)
print(li7)
문자열은 아스키코드,유니코드순으로 표기됩니다.
li8 = ['Apple', 'apple', 'orange', 'banana', 'melon']
li8.sort()
print(li8)
li9 = ['김사과', '오렌지', '반하나', '이메론', '배애리']
li9.sort()
print(li9)
비교
sorted(): iterable(반복 가능한 객체)의 모든 항목들을 정렬한 후, 그 결과를 새로운 리스트에 담아 반환하는 함수이다
sorted() 는 항목 자체를 정렬하지 않는다 따라서 반환값을 저장하고 싶을 시 변수에 저장해 주어야 한다
# ✔ 비교
# sorted(): iterable(반복 가능한 객체)의 모든 항목들을 정렬한 후, 그 결과를 새로운 리스트에 담아 반환하는 함수
li1 = [10, 40, 30, 100, 90, 50]
print(sorted(li1))
print(li1)
print(sorted(li1, reverse=True)) # 내림차순
print(li1)
li1 = sorted(li1)
print(li1)
# sorted(): 모든 요소를 정렬한 후 반환해주는 함수
li7 = [100,50,70,60,20]
print(li7)
# sorted(): 모든 요소를 정렬한 후 반환해주는 함수
print(sorted(li7))
print(li7) #리스트 항목 자체를 정렬하는것이 아니기 때문에 원래 메모리에 저장된 li7리스트 반환
result = sorted(li7) #반환값을 저장할 때는 변수에 저장
print(result)
count(): 리스트에서 특정 값의 개수를 반환하는 메서드이다
li9 = [10,20,30,50,20,40,30,20]
print(li9)
#count():리스트에서 특정 요소의 갯수를 반환
print(li9.count(20))
print(li9.count(100))