본문 바로가기
인공지능/파이썬 기초

컬렉션 타입- 리스트

by hyunji00pj 2024. 9. 26.

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)

 

1. start: 슬라이스의 시작 인덱스입니다. 이 인덱스의 요소는 슬라이스에 포함됩니다. start를 생략하면, step이 양수이면 0, step이 음수이면 -1로 간주됩니다.



2. stop: 슬라이스의 끝 인덱스입니다. 이 인덱스의 요소는 슬라이스에 포함되지 않습니다. stop을 생략하면, step이 양수이면 시퀀스의 끝, step이 음수이면 시퀀스의 시작으로 간주됩니다.



3. step: 슬라이스의 스텝(증감) 값입니다. step을 생략하면 1로 간주됩니다.
#슬라이싱을 사용하여 리스트 요소들의 순서를 반대로 설정하는 방법
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))

 

'인공지능 > 파이썬 기초' 카테고리의 다른 글

input 함수  (2) 2024.09.26
컬렉션 타입 튜플  (0) 2024.09.26
문자열 다루기  (0) 2024.09.25
파이썬의 변수  (2) 2024.09.24
파이썬 출력(print 함수)  (0) 2024.09.24