주요 학습 내용
1. 자료구조란
2. 리스트(List)
1) 리스트 아이템 조회 (index)
2) 리스트 아이템 개수 확인 및 참조(len(), for문, while문)
3) enumerate()
4) 리스트 아이템 변경(추가, 삭제, 연결)
5) 리스트 아이템 정렬(오름차순, 내림차순, 순서 뒤집기)
6) 슬라이싱
7) 그 외 기능들 ('*', index(), count(), del())


- 리스트(List): 데이터 변경(수정, 삭제 등) 가능, 중복데이터 허용
- 튜플(Tuple): 데이터 수정 불가능
- 딕셔너리(Dictionary): key값과 value값으로 이루어져있음, key값 중복 불가능
- 셋트(Set): 중복데이터 허용하지 않음, 중복으로 입력 시 값은 하나만 출력 됨

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print(f'student[0]; {students[0]}')
print(f'student[1]; {students[1]}')
print(f'student[2]; {students[2]}')
print(f'student[3]; {students[3]}')
print(f'student[4]; {students[4]}')
출력 결과 :
리스트 길이: 리스트에 저장된 아이템 개수
len()과 반복문을 이용하면 리스트의 아이템 조회가 가능하다
for문을 이용하면 리스트의 아이템을 자동으로 참조할 수 있다

(예제 for문 사용)
stuCnt = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20], [6, 22], [7, 17]] minClassNo = 0; maxClassNo = 0 minCnt = 0; maxCnt = 0 for item in stuCnt: for i in range(1, len(stuCnt)): if minCnt == 0 or minCnt > stuCnt[i][1]: minCnt = stuCnt[i][1] minClassNo = stuCnt[i][0] if maxCnt == 0 or maxCnt < stuCnt[i][1]: maxCnt = stuCnt[i][1] maxClassNo = stuCnt[i][0] print(f'학생 수가 가장 적은 학급(학생수): {minClassNo}학급({minCnt})명') print(f'학생 수가 가장 많은 학급(학생수): {maxClassNo}학급({maxCnt})명')
출력 결과 :
(예제 while문 사용)
stuCnt = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20], [6, 22], [7, 17]] minClassNo = 0; maxClassNo = 0 minCnt = 0; maxCnt = 0 n = 0 while n < len(stuCnt): if minCnt == 0 or minCnt > stuCnt[n][1]: minClassNo = stuCnt[n][0] minCnt = stuCnt[n][1] if maxCnt < stuCnt[n][1]: maxClassNo = stuCnt[n][0] maxCnt = stuCnt[n][1] n += 1 # 무한루프 방지 print(f'학생 수가 가장 적은 학급(학생수): {minClassNo}학급({minCnt})명') print(f'학생 수가 가장 많은 학급(학생수): {maxClassNo}학급({maxCnt})명')
출력 결과 :

# 가장 좋아하는 스포츠가 몇 번째에 있는지 출력
sports = ['농구', '수구', '축구', '마라톤', '테니스']
favSport = input('가장 좋아하는 스포츠 입력: ')
bestSportIdx = 0
for idx, value in enumerate(sports):
if value == favSport:
bestSportIdx = idx + 1
print(f'{favSport}(은)는 {bestSportIdx}번째에 있습니다.')
출력 결과 :
# 가족 구성원 추가
myFamilyAge = [['아빠', 40], ['엄마', 38], ['나', 9]]
print(myFamilyAge)
myFamilyAge.append(['동생', 1]) # 리스트 형식으로 추가해야함
print(myFamilyAge)
for member, age in myFamilyAge:
print(f'{member}의 나이: {age}')
출력 결과 :
# 오름차순 유지하며, 사용자 입력 숫자 추가
# 강의 수강 전 미리 만들어본 프로그램
numbers = [1, 3, 6, 11, 45, 54, 62, 74, 85]
inputNumber = int(input('숫자 입력: '))
insertIdx = 0
for idx, value in enumerate(numbers):
if inputNumber > value:
pass
else:
insertIdx = idx
break
numbers.insert(insertIdx, inputNumber)
print(numbers)
# 강의에서 만든 프로그램
for idx, number in enumerate(numbers):
print(idx, number)
if insertIdx == 0 and inputNumber < number:
insertIdx = idx
numbers.insert(insertIdx, inputNumber)
print(numbers)
출력 결과 :
.pop() : 마지막 인덱스에 해당하는 아이템 삭제 가능
.pop(n) : n번 인덱스에 해당하는 아이템 삭제 가능
위에 insert 와 같은 예제에서 아래 코드를 추가하면 결과는 다음과 같다
numbers.pop() print(numbers) numbers.pop(2) print(numbers)
출력 결과 :
.remove(아이템) : 특정 아이템 삭제 가능
단, remove()는 한 개의 아이템만 삭제 가능하므로, 삭제하려는 데이터가 2개 이상이라면 while문 사용 해야함
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동'] print(students) while '강호동' in students: # 강호동이 있으면 True, 없으면 False students.remove('강호동') print(students) print('강호동' in students)
출력 결과 :
.extend(): 연결/확장
' + ' : 리스트 더하기
group1 = ['홍길동', '박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']
group1.extend(group2)
print(f'group1: {group1}')
print(f'group2: {group2}')
(group1이 확장된 것을 볼 수 있다)
group3 = group1 + group2
print(f'group1: {group1}')
print(f'group2: {group2}')
(group1의 아이템이 변동이 없는 것을 확인할 수 있다)
scores = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
print('playerScore: {}'.format(scores))
scores.sort()
print('playerScore(오름차순): {}'.format(scores))
scores.sort(reverse=True)
print('playerScore(내림차순): {}'.format(scores))
scores.reverse()
print('playerScore(순서 뒤집기): {}'.format(scores))
출력 결과 :

numbers = [2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14]
print('numbers: {}'.format(numbers[2:4]))
# 인덱스2번째 부터 3번째 까지
print('numbers: {}'.format(numbers[:4]))
# 0부터 3까지
print('numbers: {}'.format(numbers[2:]))
# 인덱스 2부터 끝까지
print('numbers: {}'.format(numbers[2:-2]))
# 2부터 ~ 뒤에서 2번째 다음 까지
print('numbers: {}'.format(numbers[-5:-2]))
# 뒤에서 5번째부터 ~ 뒤에서 2번째 다음 까지
출력 결과 :
위 결과에서 아래 항목을 추가하면numbers[0:1] = ['two'] print('numbers: {}'.format(numbers))
(2가 'two'로 바뀐걸 확인할 수 있다)
students = ['홍길동']
print('students: {}'.format(students))
studentsMul = students * 3
print('studentsMul: {}'.format(studentsMul))
출력 결과 :
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print(f'students: {students}')
searchIdx = students.index('강호동')
print('students.index(\'강호동\'): {}'.format(searchIdx))
# 중복값 있을 시, 가장 먼저 나오는 값의 인덱스 출력됨
searchIdx = students.index('강호동', 2,6)
print('students.index(\'강호동\'): {}'.format(searchIdx))
# 범위 지정 해줄 수 있음
출력 결과 :
students = ['홍길동', '강호동', '박찬호', '이용규', '박승철', '강호동', '김지은']
print('students: {}'.format(students))
searchCnt = students.count('강호동')
print('개수: {}'.format(searchCnt))
searchCnt = students.count('강')
print('개수: {}'.format(searchCnt))
print('='*50)
# 하나씩 삭제
del(students[1])
print('students: {}'.format(students))
출력 결과 :