
배열과 같이 여러 개의 데이터를 나열한 자료 구조이다.
가변적(Mutable) 자료 구조이다.
리스트의 크기는 동적으로 조절할 수 있다.
요소(Item)를 추가하거나 삭제하여 리스트의 길이를 조절한다.
순서가 있는(Ordered) 자료 구조이다.
리스트의 각 요소는 특정한 위치(Index)를 가지고 그 순서가 유지된다.
인덱스로 요소에 접근할 수 있다.
각 요소는 고유한 인덱스를 가지고 있어 이를 통해 특정 요소에 접근할 수 있다.
인덱스는 [0]부터 시작한다.
다양한 자료형(Data Type)을 요소로 가질 수 있다.
동일한 데이터 타입 뿐만 아니라 서로 다른 데이터 타입의 요소도 포함할 수 있다.
[ ](bracket)를 이용해 선언하고, ,로 요소를 구분한다.
strs = strs = [3.14, '십', 20, 'one', '3.141592', [10, 30], (40, 50, 60)]
인덱스란, 요소(Item)에 자동으로 부여되는 번호표로 리스트의 Item을 조회할 수 있다.
index는 ‘0’번부터 시작하며 컴퓨터가 자동으로 부여하는 값이므로 임의로 변경할 수 없다.
[ ](으)로 리스트의 요소에 접근할 수 있다.
잘못된 index를 사용할 경우 IndexError: list index out of range가 발생

for문의 경우inkeyword를 이용해 index를 사용하지 않고 리스트의 요소를 자동 참조할 수 있다.➡️ 형식 :
for지역변수initerable Object
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']
for car in cars:
print(car)
studentCnts = [[1, 19], [2, 20], [3, 22], [4, 18], [5, 21]]
# 내부 리스트의 아이템을 각 변수에 할당 - iterable 객체를 사용
for classNo, cnt in studentCnts:
print('{}학급 학생수: {}'.format(classNo, cnt))
반복문과 함께 사용해 요소를 조회할 수 있는 방법
내장함수 len() : 리스트의 요소 개수를 정수로 반환
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
for i in range(len(students)):
print('students[{}] : {}'.format(i, students[i]))
n = 0
while n < len(students):
print('students[{}] : {}'.format(n, students[n]))
n += 1
클래스 enumerate를 이용하면 리스트의 Index와 Item을 한번에 조회할 수 있다.
sports = ['농구', '수구', '축구', '마라톤', '테니스']
for idx, value in enumerate(sports):
print('{} : {}'.format(idx, value))
# 실행결과
# 0 : 농구
# 1 : 수구
# 2 : 축구
# 3 : 마라톤
# 4 : 테니스
append()
append()메서드는 리스트 끝에 아이템을 추가해 준다.➡️ 형식 :
append(__object)
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
students.append('강호동')
print('students : {}'.format(students))
# students : ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
scores = [['국어', 88], ['영어', 91]]
scores.append(['수학', 96])
print('scores : {}'.format(scores))
# scores : [['국어', 88], ['영어', 91], ['수학', 96]]
insert()
insert()메서드는 특정 위치(인덱스)에 아이템을 추가할 수 있다.➡️ 형식 :
insert(__index, __object)
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
students.insert(3, '강호동')
print('students : {}'.format(students))
# students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
words = ['I', 'a', 'boy.']
words.insert(1, 'am')
for word in words:
print('{} '.format(word), end='') # I am a boy.
del
delKeyword로 item을 삭제할 수 있다.
index로 한 개씩 삭제
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
del students[1]
print('students: {}'.format(students))
# students: ['홍길동', '박찬호', '이용규', '박승철', '강호동', '김지은']
del students[3]
print('students: {}'.format(students))
# students: ['홍길동', '박찬호', '이용규', '강호동', '김지은']
slice객체로 여러 개 삭제
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
del students[1:4]
print('students: {}'.format(students))
# students: ['홍길동', '박승철', '강호동', '김지은']
pop()
pop()메서드는 Index에 해당하는 Item을 삭제하고 삭제한 Item value를 반환한다.➡️ 형식 :
pop(__index)
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
popValue = students.pop()
print('return value: {}'.format(popValue))
print('students : {}'.format(students))
# return value: 강호동
# students : ['홍길동', '박찬호', '이용규', '박승철', '김지은']
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
popValue = students.pop(3)
print('return value: {}'.format(popValue))
print('students : {}'.format(students))
# return value: 강호동
# students : ['홍길동', '박찬호', '이용규', '박승철', '김지은']
remove()
remove()메서드는 제일 처음 나타나는 특정 요소 한 개를 삭제한다.➡️ 형식 :
remove(__value)
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
print('students의 길이 : {}'.format(len(students))) # students의 길이 : 7
students.remove('강호동')
print('students : {}'.format(students))
print('students의 길이 : {}'.format(len(students)))
# students : ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
# students의 길이 : 6
clear()리스트의 모든 요소를 삭제한다.
➡️ 형식 : list_obj.
remove(__value)(dellist_obj[ : ]와 동일)
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print(students)
students.clear()
print(students)
# 실행결과
# ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
# []
extend()
extend()메서드는 리스트에 또 다른 리스트를 연결해 확장한다.➡️ 형식 :
extend(__iterable)
group1 = ['홍길동', '박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']
group1.extend(group2)
print('group1: {}'.format(group1))
print('group2: {}'.format(group2))
# group1: ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
# group2: ['강호동', '박승철', '김지은']
+연산자 : 리스트 덧셈 연산은 두 리스트의 연결(결합)이다.
group1 = ['홍길동', '박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']
result = group1 + group2
print('group1: {}'.format(group1))
print('group2: {}'.format(group2))
print('result: {}'.format(result))
# group1: ['홍길동', '박찬호', '이용규']
# group2: ['강호동', '박승철', '김지은']
# result: ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
*연산자 : 리스트 곱셈 연산은 리스트 객체 반복이다.
numbers = [2, 50, 0.12, 1, 9]
numbersMul = numbers * 3
print('numbersMul: {}'.format(numbersMul))
# numbersMul: [2, 50, 0.12, 1, 9, 2, 50, 0.12, 1, 9, 2, 50, 0.12, 1, 9]
slice
slice notation: []이나slice object: slice()는 리스트에서 원하는 범위의 부분을 잘라 새로운 리스트 객체로 반환한다.
list_object.[_n : _m]로 슬라이싱, 범위는 (n ≤ items < m)이다.
numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers: {}'.format(numbers[2:4]))
# numbers: [0.12, 1]
print('numbers: {}'.format(numbers[:4]))
# numbers: [2, 50, 0.12, 1]
print('numbers: {}'.format(numbers[2:]))
# numbers: [0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers: {}'.format(numbers[2:-2]))
# numbers: [0.12, 1, 9, 7, 17, 35]
print('numbers: {}'.format(numbers[-5:-2]))
# numbers: [7, 17, 35]
print('students: {}'.format(students))
# numbers: [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
slice()로 슬라이싱
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students: {}'.format(students[slice(2, 4)]))
# students: ['이용규', '강호동']
print('students: {}'.format(students[slice(4)]))
# students: ['홍길동', '박찬호', '이용규', '강호동']
print('students: {}'.format(students[slice(2, len(students))]))
# students: ['이용규', '강호동', '박승철', '김지은']
print('students: {}'.format(students[slice(2, len(students)-2)]))
# students: ['이용규', '강호동']
print('students: {}'.format(students[slice(len(students)-5, len(students)-2)]))
# students: ['박찬호', '이용규', '강호동']
print('students: {}'.format(students))
# students: ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
슬라이싱을 이용해 아이템을 변경할 수 있다.
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students : {}'.format(students))
# students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students[1:4] = ['park chanho', 'lee yonggyu', 'gang hodong']
print('students : {}'.format(students))
# students : ['홍길동', 'park chanho', 'lee yonggyu', 'gang hodong', '박승철', '김지은']
students[1:4] = ['박찬호', '이용규']
print('students : {}'.format(students))
# students : ['홍길동', '박찬호', '이용규', '박승철', '김지은']
students[1:3] = ['park chanho', 'lee yonggyu', 'gang hodong']
print('students : {}'.format(students))
# students : ['홍길동', 'park chanho', 'lee yonggyu', 'gang hodong', '박승철', '김지은']
sort()
sort()메서드는 아이템을 정렬한다.
True로 설정하면 내림차순 정렬이 수행된다. numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
numbers.sort()
print('students: {}'.format(numbers))
# [0.12, 1, 2, 3.14, 7, 9, 17, 35, 50, 100]
numbers.sort(reverse=True)
print('students: {}'.format(numbers))
# [100, 50, 35, 17, 9, 7, 3.14, 2, 1, 0.12]
reverse()
reverse()메서드는 아이템 순서를 뒤집어 준다. (정렬 ❌)
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students.reverse()
print('students: {}'.format(students))
# students: ['김지은', '박승철', '강호동', '이용규', '박찬호', '홍길동']
numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
numbers.reverse()
print('numbers: {}'.format(numbers))
# numbers: [3.14, 100, 35, 17, 7, 9, 1, 0.12, 50, 2]
index()
index()메서드는 인수로 받은__value에 해당하는 첫 번째 요소의 Index 값을 반환한다. 검색할 범위(__start부터 __stop까지)를 정할 수 있다.➡️ 형식 :
index(__value, __start, __stop)
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
searchIdx = students.index('강호동')
print('searchIdx: {}'.format(searchIdx)) # searchIdx: 1
searchIdx = students.index('강호동', 2, 6)
print('searchIdx: {}'.format(searchIdx)) # searchIdx: 5
count()
count()메서드는 특정(__value) 요소의 개수를 정수로 반환한다.➡️ 형식 :
count(__value)
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
searchCnt = students.count('홍길동')
print('searchCnt: {}'.format(searchCnt)) # searchCnt: 1
searchCnt = students.count('강호동')
print('searchCnt: {}'.format(searchCnt)) # searchCnt: 2
searchCnt = students.count('김아무개')
print('searchCnt: {}'.format(searchCnt)) # searchCnt: 0