- 여러개의 데이터가 묶여있는 자료형을 컨테이너 자료형 이라고 한다.
- 컨테이너 자료형의 데이터 구조를 자료구조라고 한다.
- 배열과 같이 여러개의 데이터를 나열한 자료구조
- '[ ]'을 이용해서 선언하고 데이터 구분은 ','를 이용한다.
특징
- 아이템에 자동으로 부여되는 번호표
인덱스를 이용해서 리스트 아이템을 조회 할 수 있다.
students = ['김성예','신경도','박기준','최승철','황동석']
for i in range(5):
if i % 2 == 0:
print(f'인덱스 짝수: {students[i]}')
else:
print(f'인덱스 홀수: {students[i]}')
인덱스 짝수: 김성예
인덱스 홀수: 신경도
인덱스 짝수: 박기준
인덱스 홀수: 최승철
인덱스 짝수: 황동석
- 길이를 알려주는 함수
- 리스트 길이는 리스트에 저장된 아이템의 갯수를 말한다.
students = ['김성예','신경도','박기준','최승철','황동석']
print(len(students))
5
students = ['박찬호', '이용규', '홍길동', '박승철', '김지은']
#for문을 리스트 길이만큼 반복
for i in range(len(students)):
print(students[i])
print()
#for문을 students 리스트 안의 아이템 수만큼 반복
for item in students:
print(item)
박찬호
이용규
홍길동
박승철
김지은
박찬호
이용규
홍길동
박승철
김지은
- cars = ['제네시스','람보르기니','페라리','카니발','소나타']
for i in range(len(cars)):
print(f'{cars[i]}')
제네시스
람보르기니
페라리
카니발
소나타
for item in cars:
print(item)
제네시스
람보르기니
페라리
카니발
소나타
- studentsCnts = [[1,19],[2,20],[3,22],[4,18],[5,21]]
가독성이 떨어진다.
for i in range(len(studentsCnts)):
print(f'{studentsCnts[i][0]}학급 학생수 : {studentsCnts[i][1]}')
1학급 학생수 : 19
2학급 학생수 : 20
3학급 학생수 : 22
4학급 학생수 : 18
5학급 학생수 : 21
반복문에 변수 2개
for grade,studentCnt in studentsCnts:
print(f'{grade}학급 학생수 : {studentCnt}')
1학급 학생수 : 19
2학급 학생수 : 20
3학급 학생수 : 22
4학급 학생수 : 18
5학급 학생수 : 21
과락점수 60점
scores = [
['국어',58],
['영어',77],
['수학',89],
['과학',99],
['국사',50],
]
minScore = 60
#인덱스를 이용한 방법
for i in scores:
if i[1] < minScore:
print(f'과락 과목 : {i[0]}, 점수 : {i[1]}')
print()
#리터러블 객체 이용
for subject, score in scores:
if score<60:
print(f'과락 과목 : {subject}, 점수 : {score}')
print()
#continue이용
for subject, score in scores:
if score>=60: continue
print(f'과락 과목 : {subject}, 점수 : {score}')
과락 과목 : 국어, 점수 : 58
과락 과목 : 국사, 점수 : 50
과락 과목 : 국어, 점수 : 58
과락 과목 : 국사, 점수 : 50
과락 과목 : 국어, 점수 : 58
과락 과목 : 국사, 점수 : 50
studentCnts = [[1, 18], [2, 19], [3, 23], [4, 21], [5, 20], [6, 22], [7, 17]]
minCnt = 0; maxCnt = 0
minclassNo =0; maxclassNo = 0
for classNo, cnt in studentCnts:
if minCnt == 0 or maxCnt > cnt:
minclassNo = classNo
minCnt = cnt
if maxCnt < cnt:
maxclassNo = classNo
maxCnt = cnt
print(f'학생수 가장 적은 학급 : {minclassNo}({minCnt}명) ')
print(f'학생수 가장 많은 학급 : {maxclassNo}({maxCnt}명) ')
학생수 가장 적은 학급 : 7(17명)
학생수 가장 많은 학급 : 3(23명)
cars = ['제네시스','람보르기니','페라리','카니발','소나타']
#while1
n = 0
while n<len(cars):
print(cars[n])
n +=1
#while2
n = 0
flag = True
while flag:
print(cars[n])
n +=1
if n == len(cars):
break
#while3
n = 0
while True:
print(cars[n])
n +=1
if n == len(cars):
break
결과는 모두 동일
제네시스
람보르기니
페라리
카니발
소나타
minScore = 60
scores = [
['국어',58],
['영어',77],
['수학',89],
['과학',99],
['국사',50],
]
n = 0
while n < len(scores):
if scores[n][1] < minScore:
print(f'과락 과목 : {scores[n][0]}, 점수 : {scores[n][1]}')
n+=1
과락 과목 : 국어, 점수 : 58
과락 과목 : 국사, 점수 : 50
studentsCnts = [[1,18],
[2,19],
[3,23],
[4,21],
[5,20],
[6,22],
[7,17]]
minCnt =0;maxCnt=0
minclassCnt = 0;maxclassCnt = 0
n=0
while n < len(studentsCnts):
if minCnt == 0 or minCnt > studentsCnts[n][1]:
minclassCnt = studentsCnts[n][0]
minCnt = studentsCnts[n][1]
if maxCnt < studentsCnts[n][1]:
maxclassCnt = studentsCnts[n][0]
maxCnt = studentsCnts[n][1]
n += 1
print(f'학생수 가장 적은 학급 : {minclassCnt}학급 ({minCnt}명)')
print(f'학생수 가장 많은 학급 : {maxclassCnt}학급 ({maxCnt}명)')
학생수 가장 적은 학급 : 7학급 (17명)
학생수 가장 많은 학급 : 3학급 (23명)
- 인덱스와 아이템을 함께 조회 가능하다.
- enumerate(조회 할 리스트)
sports = ['농구','수구','축구','마라톤','테니스']
for idx, value in enumerate(sports):
print(f'{idx} : {value}')
0 : 농구
1 : 수구
2 : 축구
3 : 마라톤
4 : 테니스
message = input('메시지 입력: ')
cnt = 0
for idx, value in enumerate(message):
if value == ' ':
cnt+=1
print(f'\' \' 의 갯수 : {cnt}')
메시지 입력: 안녕 나는 홍길동 이라고 해
' ' 의 갯수 : 4
- 리스트에 아이템을 추가 할 떄 사용
- 마지막 인덱스에 아이템을 추가
family = [
['아빠',40],
['엄마',38],
['나',9],
]
print(family)
family.append(['동생',1])
print(f'{family}')
[['아빠', 40], ['엄마', 38], ['나', 9]]
[['아빠', 40], ['엄마', 38], ['나', 9], ['동생', 1]]
- 리스트의 특정 위치에 아이템 추가
- insert(추가할 인덱스, 추가할 내용)
numbers = [1,3,6,11,45,54,62,74,85]
inputNum = int(input('숫자 입력: '))
inputIdx = 0
for idx, num in enumerate(numbers):
if inputIdx ==0 and inputNum < num:
inputIdx = idx
numbers.insert(inputIdx,inputNum)
print(numbers)
숫자 입력: 84
[1, 3, 6, 11, 45, 54, 62, 74, 84, 85]
- pop() ==> 리스트 마지막 아이템 삭제
- pop(삭제할 인덱스) ==> 해당 인덱스 아이템 삭제
playerScores = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
print(f'playerScores : {playerScores}')
minSco = 0; maxSco = 0
minScoIdx = 0; maxScoIdx = 0
#pop()이용해 최저 점수 삭제
for idx,score in enumerate(playerScores):
if idx == 0 or minSco > score:
minScoIdx = idx
minSco = score
print(f'minScore : {minSco}, minScoreIdx : {minScoIdx}')
playerScores.pop(minScoIdx)
#pop()이용해 최고 점수 삭제
for idx, score in enumerate(playerScores):
if maxSco < score:
maxScoIdx = idx
maxSco = score
print(f'maxSco : {maxSco}, maxScoIdx : {maxScoIdx}')
playerScores.pop(maxScoIdx)
#최저, 최고점 삭제된 점수 리스트
print(f'playerScores : {playerScores}')
playerScores : [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
minScore : 8.8, minScoreIdx : 4
maxSco : 9.8, maxScoIdx : 3
playerScores : [9.5, 8.9, 9.2, 9.0]
- 리스트의 특정 아이템을 삭제
- remove()함수는 한번에 하나의 아이템만 삭제 가능, 2개 이상 삭제하려면 while문 사용
students = ['홍길동','박찬호','이용규','강호동','박승철','김지은','강호동']
print(students)
while '강호동' in students: #students 리스트에 '강호동'이 있을 떄 까지
students.remove('강호동')
print(students)
['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
['홍길동', '박찬호', '이용규', '박승철', '김지은']
- 리스트에 또 다른 리스트가 추가되어 확장된 리스트로 되는 것.
- a = [1,2], b =[3,4] --> a.extend(b) --> a=[1,2,3,4], b=[3,4]
group1 = ['홍길동','박찬호','이용규']
group2 = ['강호동','박승철','김지은']
print(group1)
print(group2)
group1.extend(group2)
print(group1)
print(group2)
['홍길동', '박찬호', '이용규']
['강호동', '박승철', '김지은']
['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
['강호동', '박승철', '김지은']
- 덧셈연산자를 이용하면 연결된 새로운 리스트가 생성
group1 = ['홍길동','박찬호','이용규']
group2 = ['강호동','박승철','김지은']
result = group1 + group2
print(group1)
print(group2)
print(result) #group1, group2가 이어진 새로운 result리스트가 생성
['홍길동', '박찬호', '이용규']
['강호동', '박승철', '김지은']
['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
myFavoriteNum = [1,3,5,6,7]
friendFavoriteNum = [2,3,5,8,10]
addList = myFavoriteNum + friendFavoriteNum
print(f'addList : {addList}')
result = []
for num in addList:
if num not in result: #중복 숫자 제외
result.append(num)
print(f'result : {result}')
addList : [1, 3, 5, 6, 7, 2, 3, 5, 8, 10]
result : [1, 3, 5, 6, 7, 2, 8, 10]
- 오름차순 내림차순으로 정렬해 주는 함수
- sort() : 오름차순 정렬
- sort(reverse=True) : 내림차순 정렬
numbers = [2,6,1,59,32,569]
print(numbers)
#오름차순
numbers.sort()
print(numbers)
#내림차순
numbers.sort(reverse=True)
print(numbers)
[2, 6, 1, 59, 32, 569]
[1, 2, 6, 32, 59, 569]
[569, 59, 32, 6, 2, 1]
playerScores =[9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
print(f'playerScore : {playerScores}')
playerScores.sort()
print(f'playerScore : {playerScores}')
playerScores.pop(0)
playerScores.pop(len(playerScores)-1)
print(f'playerScore : {playerScores}')
sum = 0
avg = 0
for score in playerScores:
sum += score
avg = sum / len(playerScores)
print(f'총점 : {round(sum,2)}')
print(f'평균 : {round(avg,2)}')
playerScore : [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
playerScore : [8.8, 8.9, 9.0, 9.2, 9.5, 9.8]
playerScore : [8.9, 9.0, 9.2, 9.5]
총점 : 36.6
평균 : 9.15
- 리스트 아이템 순서 뒤집어 주는 함수
secret = '27156231'
secretList = []
#암호 문자열을 int로 캐스팅해 리스트로 만들어줄 것.
for cha in secret:
secretList.append(int(cha))
print(secretList)
#암호를 뒤집기
secretList.reverse()
print(secretList)
#암호 해독
val = secretList[0]*secretList[1]
secretList.insert(2,val)
val = secretList[3]*secretList[4]
secretList.insert(5,val)
val = secretList[6]*secretList[7]
secretList.insert(8,val)
val = secretList[9]*secretList[10]
secretList.insert(11,val)
print(f'secretList : {secretList}')
[2, 7, 1, 5, 6, 2, 3, 1]
[1, 3, 2, 6, 5, 1, 7, 2]
secretList : [1, 3, 3, 2, 6, 12, 5, 1, 5, 7, 2, 14]
- 원하는 아이템만 뽑아내는 것
- [n:m] : 인덱스 n번째 부터 인덱스m이전까지 아이템 뽑기
- [2:4] : 2<=n<4 범위의 아이템 뽑기
students = ['홍길동','박찬호','이용규','강호동','박승철','김지은']
print(students)
print(students[2:4]) #인덱스 2~3까지 아이템만 출력
print(students[:4]) #인덱스 0~3까지
print(students[2:]) #인덱스 2~마지막
print(students[2:-2]) #음수는 마지막 인덱스 부터 시작
print(students[-5:-2]) #음수는 마지막 인덱스 부터 시작
['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
['이용규', '강호동']
['홍길동', '박찬호', '이용규', '강호동']
['이용규', '강호동', '박승철', '김지은']
['이용규', '강호동']
['박찬호', '이용규', '강호동']
students = ['홍길동','박찬호','이용규','강호동','박승철','김지은']
#인덱스 1부터 3까지 슬라이싱하고 2개씩 건너뛰면서 출력
print(students[1:4:2])
['박찬호', '강호동']
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students : {}'.format(students))
#변경할 범위 지정 후 변경 내용 입력
students[1:4] = ['park chanho', 'lee yonggyu', 'gang hodong']
print('students : {}'.format(students))
#변경할 아이템이 슬라이싱한 범위보다 적으면 적은대로 리스트가 감소한다.
students[1:4] = ['박찬호', '이용규']
print('students : {}'.format(students))
#변경할 아이템이 슬라이싱한 범위보다 많으면 많은대로 리스트에 추가된다.
students[1:3] = ['park chanho', 'lee yonggyu', 'gang hodong']
print('students : {}'.format(students))
students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students : ['홍길동', 'park chanho', 'lee yonggyu', 'gang hodong', '박승철', '김지은']
students : ['홍길동', '박찬호', '이용규', '박승철', '김지은']
students : ['홍길동', 'park chanho', 'lee yonggyu', 'gang hodong', '박승철', '김지은']
students = ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
print('students: {}'.format(students[slice(2, 4)]))
print('students: {}'.format(students[slice(4)]))
print('students: {}'.format(students[slice(2, len(students))]))
students: ['이용규', '강호동']
students: ['홍길동', '박찬호', '이용규', '강호동']
students: ['이용규', '강호동', '박승철', '김지은']