Chap.9 리스트와 튜플[리스트] - 자료의 집합, 리스트의 요소, 이중 리스트
리스트
자료의 집합, 리스트의 요소, 이중 리스트
자료의 집합
score = [88, 95, 70, 100, 99]
total = 0
for s in score:
total += s
print("총점: ", total)
print("평균: ", total/len(score))1
결과
총점: 452
평균: 90.4
리스트가 아닌 type을 list로 바꿔주는 함수
print(list("Korea"))
결과
['K', 'o', 'r', 'e', 'a']
많이하는 실수
리스트의 요소 - 읽기
- 리스트[인덱스]
- 리스트[begin:end:step]
문자열은 불변객체였지만, 리스트는 수정이 가능하다.
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[:])
print(nums[2:5])
print(nums[:4])
print(nums[6:])
print(nums[1:7:2])
score = [88, 95, 70, 100, 99]
print(score[2])
score[2]=55
print(score[2])
결과
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4]
[0, 1, 2, 3]
[6, 7, 8, 9]
[1, 3, 5]
70
55
Reference Value의 이해
def main():
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
nums = list(range(10)) # 둘이 같다.
nums2 = nums # 데이터 복사가 아니라 위치 정보를 복사한 것이다.
# nums2 = nums[:] 를 이용하면 새로 구성된 데이터를 복사한다.
# Heap의 새로운 위치에 리스트가 생긴다.
print(nums == nums2)
nums2[0] = -1 # nums2가 가르키고 있는 데이터 중 첫번째를 -1로 바꾼다.
print(nums) # 위치 정보로 가서 출력
print(nums2) # 위치 정보로 가서 출력
print(nums == nums2) # 그래서 같다.
main()
결과
True
[-1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[-1, 1, 2, 3, 4, 5, 6, 7, 8, 9]
True
리스트 변수(nums,nums2)는 참조값(reference value)을 가지고 있다.
리스트의 요소 - 쓰기
Image processing 때 많이 쓴다.
def main():
nums = list(range(10))
nums[2:5] = [20, 30, 40] # 대체
print(nums)
nums[6:8] = [60, 70, 80, 90] # 개수 많을 때
print(nums)
nums[6:8] = [60] # 개수 적을 때
print(nums)
nums[6:6] = [100, 200] # 삽입만 할 때
print(nums)
main()
결과
[0, 1, 20, 30, 40, 5, 6, 7, 8, 9]
[0, 1, 20, 30, 40, 5, 60, 70, 80, 90, 8, 9]
[0, 1, 20, 30, 40, 5, 60, 80, 90, 8, 9]
[0, 1, 20, 30, 40, 5, 100, 200, 60, 80, 90, 8, 9]
문자열은 읽기는 나눠서 되지만 쓰기는 안된다.
리스트의 요소 - 결합, 반복 (연산자)
def main():
list1 = [1, 2, 3, 4, 5]
list2 = [10, 11]
listadd = list1 + list2 # 결합
print(listadd)
listmulti = list2 * 3 # 반복
print(listmulti)
main()
결과
[1, 2, 3, 4, 5, 10, 11]
[10, 11, 10, 11, 10, 11]
이중 리스트
lol = [
[1, 2, 3], # 주석도 자유롭다.
[4, 5],
[6, 7, 8, 9]
] # 리스트는 대괄호 때문에 들어쓰기 규칙, 개행 상관없다.
print(lol[0])
print(lol[2][1])
for sub in lol: # 행의 숫자만큼 돈다.
for item in sub: # 열의 숫자만큼 돈다.
print(item, end=' ')
print()
결과
[1, 2, 3]
7
1 2 3
4 5
6 7 8 9
예제
성적 관리 이중리스트
def main():
score = [
[88, 76, 92, 98],
[65, 70, 58, 82],
[82, 80, 78, 88]
]
total = 0
totalsub =0
for student in score:
subject_total = 0
for subject in student:
subject_total += subject
subjects = len(student)
print("총점 %d, 평균 %.2f" % (subject_total, subject_total/subjects))
total += subject_total
totalsub += subjects
print("전체평균 %.2f" % (total/totalsub))
main()
결과
총점 354, 평균 88.50
총점 275, 평균 68.75
총점 328, 평균 82.00
전체평균 79.75
함수로 구현
def getSubjectTotal(student): # 리스트가 오면 1:1로 대응
subject_total = 0
for subject in student:
subject_total += subject
return subject_total
def printAvg(student, subject_total):
subjects = len(student)
avg = subject_total / subjects
print(f"총점 {subject_total}, 평균 {avg:.2f}")
return subjects
def main():
score = [
[88, 76, 92, 98],
[65, 70, 58, 82],
[82, 80, 78, 88]
]
total = 0
totalsub =0
for student in score:
subject_total = getSubjectTotal(student)
subjects = printAvg(student, subject_total)
total += subject_total
totalsub += subjects
total_avg = total / totalsub # 이 식이 바로 들어오는 것 보다
print(f"전체평균 {total_avg}") # 이것을 권장
main()
결과
총점 354, 평균 88.50
총점 275, 평균 68.75
총점 328, 평균 82.00
전체평균 79.75
문자열, 리스트, 튜플 슬라이싱 가능
슬라이싱 이용 추출 가능
리스트는 슬라이싱을 이용 쓰기도 가능
문자열, 리스트 : 객체. 자체적인 함수도 가지고 있다.
복습
findMin, findMax
기존 코드
def findMin(*numbers):
min = 999999
for num in numbers:
if num < min:
min = num
return min
def findMax(*numbers):
max = -999999
for num in numbers:
if num > max:
max = num
return max
min = findMin(2, 7, 5, -1, 20)
print('최소값: ', min)
max = findMax(2, 7, 5, -1, 20)
print('최대값: ', max)
결과
최소값: -1
최대값: 20
오류 코드
lst = [2, 7, 5, -1, 20]
max = findMax(lst)
print('최대값: ', max)
결과
오류
위 처럼하면 finMax([2, 7, 5, -1, 20]) 이렇게 넘어간다.
첫번째 요소로 리스트가 넘어간다. 오류
루프를 한번 돈다. if에서 int와 list 비교하면서 error
해결
lst = [2, 7, 5, -1, 20]
max = findMax(*lst)
print('최대값: ', max)
함수 정의 앞에 붙은 *는 묶어라
호출 할 때 붙은 *는 펼쳐라
단, 위의 최대, 최소 함수는 범용적이지 않다. (최대 최소의 값이 존재)
범용적인 findMin, findMax
def findMax(*numbers):
max = numbers[0]
for num in numbers[1:]:
if num > max:
max = num
return max
'인터페이스 개발 > Python' 카테고리의 다른 글
Python - 리스트와 튜플[예제] - Number guessing game(추가) (0) | 2020.07.25 |
---|---|
Python - 리스트와 튜플[리스트 관리] - 삽입, 연결, 삭제, 검색, 정렬, 컴프리핸션 (0) | 2020.07.25 |
Python - 문자열 관리[포맷팅] - 포맷팅, 선형 포맷팅, 자리 채움방식 (0) | 2020.07.25 |
Python - 문자열 관리[문자열 메서드] - 검색, 조사, 기타 메서드, 변경, 분할, 대체 (0) | 2020.07.25 |
Python - 문자열 관리[문자열 분리] - 첨자, 슬라이싱 (0) | 2020.07.25 |
댓글