파이썬 컬렉션 타입 - 리스트

현서·2025년 1월 1일

파이썬

목록 보기
5/27
post-thumbnail

1. 컬렉션 타입

여러 개의 데이터 항목을 하나의 단위로 관리할 수 있게 해주는 데이터 구조를 의미.
이것은 여러 개의 데이터를 하나의 변수에 저장하고, 관리할 수 있게 해준다. ex) 기본적인 컬렉션 타입: 리스트, 튜플, 세트, 딕셔너리 등

2. 리스트

여러 값들을 하나의 변수에 저장하고 관리할 수 있게 해주는 순차적인 자료구조

li1 = [1, 3, 5, 7, 9]
print(li1)
print(type(li1))

li2 = list([1, 3, 5, 7, 9])
print(li2)
print(type(li2))

li3 = ['김사과', '반하나', '오렌지', '이메론']
print(li3)

li4 = [1, 50.5, '김사과', True] # 각자 타입이 다른 데이터를 저장
print(li4)
print(type(li4))
print(li4[0])
print(type(li4[0]))
print(li4[0])
print(li4[1])
print(li4[2])
print(li4[3])
# print(li4[4]) # IndexError: list index out of range
print(type(li4[0]))
print(type(li4[1]))
print(type(li4[2]))
print(type(li4[3]))
[1, 3, 5, 7, 9]
<class 'list'>
[1, 3, 5, 7, 9]
<class 'list'>
['김사과', '반하나', '오렌지', '이메론']
[1, 50.5, '김사과', True]
<class 'list'>
1
<class 'int'>
1
50.5
김사과
True
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
li1 = [1, 3, 5, 7, 9]
print(li1)
print(li1[0])
print(li1[-1])
print(li1[0] + li1[-1])

li2 = [1, 2, '파이썬', ['김사과', '오렌지']]
print(li2)
print(type(li2))
print(li2[1])
print(type(li2[1]))
print(li2[3])
print(type(li2[3]))
print(li2[3][1])
print(type(li2[3][1]))

li3 = [1, 2, 3, ['김사과', '오렌지', '반하나', ['🍟','🌭','🥩','🍗']]]
print(li3)
print(li3[2])
print(li3[-1])
print(li3[-1][-2])
print(li3[-1][-1][-2])
print(li3[-1][-1][-1])
[1, 3, 5, 7, 9]
1
9
10
[1, 2, '파이썬', ['김사과', '오렌지']]
<class 'list'>
2
<class 'int'>
['김사과', '오렌지']
<class 'list'>
오렌지
<class 'str'>
[1, 2, 3, ['김사과', '오렌지', '반하나', ['🍟', '🌭', '🥩', '🍗']]]
3
['김사과', '오렌지', '반하나', ['🍟', '🌭', '🥩', '🍗']]
반하나
🥩
🍗
li1 = [10, 20, 30, 40, 50]
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])
[10, 20, 30, 40, 50]
[10, 20, 30]
[10, 20, 30, 40, 50]
[100, 20, 30, 40, 50]
[100, 20, 30, 40, 50]
[3]
['김사과', '오렌지']
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])
del li4[1]
print(li4)

li4 = [10, 20, 30, 40, 50]
print(li4)
del li4[1]
print(li4)
[10, '😁', '😂', '😎', '😍', 30, 40, 50]
[10, ['😁', '😂', '😎', '😍'], 30, 40, 50]
[20, 30]
[10, 40, 50]
[20]
20
[10, 30, 40, 50]
[10, 20, 30, 40, 50]
[10, 30, 40, 50]
li5 = [10, 20, 30]
li6 = [40, 50, 60]
print(li5 + li6)
print(li6 + li5)

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)
[10, 20, 30, 40, 50, 60]
[40, 50, 60, 10, 20, 30]
[10, 20, 30, 40, 50, 60]
[10, 20, 30, 40, 50, 60]
[10, 20, 30, 10, 20, 30, 10, 20, 30]

3. 함수와 메서드

# len(): 객체의 길이를 반환하는 파이썬의 기본 내장 함수
li6 = [10, 20, 30]
print(len(li6))
3
# append(): 리스트 요소의 끝에 새로운 요소를 추가
li6 = [10, 20, 30]
print(li6)

li6.append(100)
print(li6)
# li6.append(200, 300)
li6.append([200, 300])
print(li6)
[10, 20, 30]
[10, 20, 30, 100]
[10, 20, 30, 100, [200, 300]]
# extend(): 리스트 요소의 끝에 새로운 여러 요소를 추가
li6 = [10, 20, 30]
print(li6)

# li6.extend(100)
li6.extend([100])
print(li6)
li6.extend([200, 300, 400])
print(li6)
[10, 20, 30]
[10, 20, 30, 100]
[10, 20, 30, 100, 200, 300, 400]
# pop(): 리스트 마지막 요소를 삭제하고 삭제된 요소를 반환
li6 = [10, 20, 30]
print(li6)

# print(li6.pop())
temp = li6.pop()
print(li6)
print(temp)
print(li6.pop())
print(li6)
[10, 20, 30]
[10, 20]
30
20
[10]
# index(): 리스트에서 특정 요소의 값 인덱스를 반환
li6 = [10, 20, 30]
print(li6)

print(li6.index(30))
# print(li6.index(100)) # 값이 없으면 에러
[10, 20, 30]
2
# reverse(): 리스트의 요소들의 순서를 반대로 설정
li7 = [100, 50, 70, 60, 20]
print(li7)

li7.reverse()
print(li7)
[100, 50, 70, 60, 20]
[20, 60, 70, 50, 100]
# 슬라이싱을 사용하여 리스트의 요소들의 순서를 반대로 설정하는 방법
li7 = [100, 50, 70, 60, 20]
print(li7[:]) # [0:5]
print(li7[0:5])
print(li7[::])    # step이 생략
print(li7[0:5:1]) # step의 기본값은 1
print(li7[0:5:2]) # step을 2로 설정

li7 = [100, 50, 70, 60, 20]
print(li7[::-1])
# step이 -1일 경우 start의 기본값은 -1, stop의 기본값은 0으로 설정
print(li7[1::-1])
print(li7[:0:-1])
[100, 50, 70, 60, 20]
[100, 50, 70, 60, 20]
[100, 50, 70, 60, 20]
[100, 50, 70, 60, 20]
[100, 70, 20]
[20, 60, 70, 50, 100]
[50, 100]
[20, 60, 70, 50]
# sort(): 리스트의 요소를 오름차순으로 정렬
li7 = [100, 50, 70, 60, 20]
print(li7)

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)
[100, 50, 70, 60, 20]
[20, 50, 60, 70, 100]
[100, 70, 60, 50, 20]
['Apple', 'apple', 'banana', 'melon', 'orange']
['김사과', '반하나', '배애리', '오렌지', '이메론']
# sorted(): 모든 요소를 정렬한 후 반환해주는 함수
li7 = [100, 50, 70, 60, 20]
print(li7)

result = sorted(li7)
print(li7)
print(result)
[100, 50, 70, 60, 20]
[100, 50, 70, 60, 20]
[20, 50, 60, 70, 100]
# count(): 리스트에서 특정 요소의 갯수를 반환
li9 = [10, 20, 30, 50, 20, 40, 30, 20]
print(li9)

print(li9.count(20))
print(li9.count(100))
[10, 20, 30, 50, 20, 40, 30, 20]
3
0

✔ 다시 정리해보기!

  • 리스트의 각 항목은 위치(인덱스)를 가지고 있고, 인덱스를 사용하여 접근할 수 있다.
  • 슬라이싱 : 리스트의 일부분만을 추출할 수 있다. (리스트에서 여러 개 요소를 잘라서 새로운 리스트로 만드는 것)
  • ✨ 리스트의 항목들은 변경 가능! (수정, 추가, 삭제 가능)
  • 연산 : 리스트 간 + 연산으로 리스트 결합 가능, * 연산으로 리스트 반복 가능

여러 함수, 메소드

  • len() : 객체의 길이 반환
  • ✨ append() : 리스트 요소의 끝에 새로운 요소 추가. (단, 여러개를 넣을 수 X)
  • ✨ extend() : 리스트 요소의 끝에 새로운 여러 요소 추가
  • pop() : 리스트 마지막 요소 삭제, 삭제된 요소 반환
  • index() : 리스트에서 특정 요소의 값 인덱스 반환
  • reverse() : 리스트 요소들의 순서를 반대로 설정
  • ✨ sort() : 리스트의 요소를 오름차순으로 정렬
  • ✨ sort(reverse=True) : 리스트의 요소를 내림차순으로 정렬
  • ✨ sorted() : 모든 요소를 정렬한 후 반환해주는 함수
  • count() : 리스트에서 특정 요소의 갯수를 반환

sort()와 sorted()의 차이

항목list.sort()sorted(list)
작동 대상리스트만 사용 가능모든 iterable 사용 가능
정렬 방식리스트 자체를 변경새로운 정렬된 리스트 반환
반환값None 반환 (리스트 자체 변경)정렬된 새 리스트 반환
원본 보존❌ 원본 리스트가 바뀜✅ 원본은 그대로 유지됨

sort()와 sorted() 중, 언제 어떤 것을 써야 할까...?

상황추천 함수
원본 리스트를 그대로 두고 싶을 때sorted()
원본 리스트 자체를 정렬해도 상관없을 때sort()

sort()와 sorted() 공통점 : 둘 다 reverse=True, key=함수 등의 옵션 사용 가능

profile
The light shines in the darkness.

0개의 댓글