1. List
■ List 특징
- 배열과 같은 자료(시퀀스 구조, 즉 순서가 있다), 수정 가능하다, 가변적이다.
- 리스트의 요소는 일반적으로 같은 타입이지만 다른 타입을 썩어서 저장하는 것도 가능하다 (일반적이지는 않음)
- 첨자로 음수 가능
- + 연산자를 이용하면 두 개의 서로 다른 리스트를 붙일 수 있다.
- [] 또는 list()를 이용해 생성
■ List slicing
- 문자열과 동일하게 슬라이싱 가능
■ Deep Copy
- [:] 또는 copy 모듈의 deepcopy() 함수를 이용하여 깊은복사 가능
■ List 연산
+ : 리스트 연결
* : 리스트 반복
■ List 관련 함수
함수명 | 설명 |
append() | 리스트의 뒤에 데이터 추가하기 |
sort() | 리스트를 정렬 역순으로 정렬하기 위해서는 reverse=True 옵션 |
reverse() | 리스트 요소 순서를 뒤집는다 |
index() | 특정 요소의 위치 값 반환 |
insert(위치, 데이터) | 지정된 위치에 데이터를 삽입한다 |
pop() | 마지막 요소 리턴 후 삭제 |
count(요소값) | 특정 요소의 개수 세기 |
extend(리스트) | 원래의 리스트를 매개변수로 전달한 리스트와 합쳐서 확정 |
len(리스트) | 리스트 요소의 개수를 구함 |
a = []
b = list()
c = [1,2,3]
# 슬라이싱
a = [1, 2, 3, 4, 5, 6, 7]
print(a[:2])
print(a[2:])
# 얕은 복사
b = a # a와 b는 같은 참조값을 갖게 된다
print(b)
a[2] = 20
print(b) # a를 바꿨지만 b도 바뀜 (서로의 변화에 영향을 미침)
print('-'*20) # 경계선
# 깊은 복사
c = a[:]
print(c)
print(a is b) # 동일한 참조값
print(a is c) # 서로 다른 참조값
print('-'*20)
# 리스트 요소 삭제
a[1:3] = [] # 비어있는 값을 집어넣으면 삭제
print(a)
a = [1, 5, 3, 6, 7]
# a.sort() # 오름차순 정렬
a.sort(reverse=True) # 내림차순 정력
print(a)
a = [1, 4, 5, 5, 11, 10, 87, 34, 5]
# 다음 함수는 리스트 객체의 함수가 아닌 파이썬의 내장 함수
print(len(a)) # 원소의 갯수
print(max(a)) # 최대값
print(min(a)) # 최소값
print(sum(a)) # 합계
print(sum(a) / len(a)) # 평균
# 이중 리스트
l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(l)
print(l[0])
print(l[1][0])
for x in l:
for y in x:
print(y, end=' ')
print() # 두번째 리스트를 출력할 때 개행
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[1, 2, 3]
4
1 2 3
4 5 6
7 8 9
import copy # 외국 모듈을 불러올 때 사용
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
# [:]를 이용한 깊은 복사는 서브 리스트까지 깊은 복사를 수행하지 않는다.
# copy_m = matrix[:]
# 반면 deepcopy함수는 모든 요소에 대한 깊은 복사를 수행한다.
copy_m = copy.deepcopy(matrix)
print(id(matrix))
print(id(copy_m))
print('-'*20)
print(id(matrix[0]))
print(id(copy_m[0]))
[문제] 성적 총점과 평균 구하기
- 학생 3명의 성적에 대해 각각 총점과 평균을 구하고, 전체 평균을 구하세요.
score = [[88, 76, 92, 98],
[65, 70, 58, 82],
[82, 80, 78, 88]]
result = 0
for x in score:
s = 0
for y in x:
s += y
print('총점: ', s, '\t', '평균: ', s/4)
result += s/4
print('전체 평균: ', result/3)
score = [[88, 76, 92, 98],
[65, 70, 58, 82],
[82, 80, 78, 88]]
total = 0 # 모든 학생의 총점을 저장
all_subject = 0 # 전체 과목 수를 저장
index = 0 # 학생 번호 지정
for student in score:
index += 1
print(f'{index}번 학생 총점: {sum(student)}, 평균: {sum(student)/len(student):.2f}') # 소수점 이하 2자리까지만
total += sum(student)
all_subject += len(student)
print(f'전체 평균: {total / all_subject:.2f}')
1번 학생 총점: 354, 평균: 88.50
2번 학생 총점: 275, 평균: 68.75
3번 학생 총점: 328, 평균: 82.00
전체 평균: 79.75
[문제] 일 수 구하기
- 1~12월 중 입력받은 월이 몇 일까지 있는지를 계산하는 프로그램을 작성하세요.
- 단, 윤년의 2월인 경우에는 최대 일수를 29일로 출력한다.
[예시]
년도를 입력하세요: 2023
월을 입력하세요: 10
2023년 10월은 31일까지 있습니다.
year = int(input('년도를 입력하세요: '))
month = int(input('월을 입력하세요: '))
result = '윤년' if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0 else '평년'
if month in [4, 6, 9, 11]:
print(f'{year}년 {month}월은 30일까지 있습니다.')
elif result == '윤년' and month == 2:
print(f'{year}년 {month}월은 29일까지 있습니다.')
elif result == '평년' and month == 2:
print(f'{year}년 {month}월은 28일까지 있습니다.')
else:
print(f'{year}년 {month}월은 31일까지 있습니다.')
년도를 입력하세요: 2020
월을 입력하세요: 2
2020년 2월은 29일까지 있습니다.
daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
year = int(input('년도를 입력하세요: '))
month = int(input('월을 입력하세요: '))
max_date = 0
if month == 2:
max_date = 29 if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0 else 28
else:
max_date = daysInMonth[month-1]
print(f'{year}년 {month}월은 {max_date}일까지 있습니다.')
년도를 입력하세요: 2023
월을 입력하세요: 2
2023년 2월은 28일까지 있습니다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
[Python] 제어문과 반복문 (if, while, for, break, continue) (0) | 2023.10.29 |
---|---|
[Python] 문자열 다루기 (1) | 2023.10.29 |
[Python] Collection - Dictionary (1) | 2023.10.27 |
[Python] Collection - Tuple (0) | 2023.10.27 |
[Python] Collection - Set (1) | 2023.10.27 |