2차원 리스트란?
2차원 리스트 생성 방법
s = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]
]
rows = 3
cols = 5
s = []
for row in range(rows):
s += [[0] * cols] # 중요: [0] * cols는 0으로 채워진 cols 길이의 1차원 리스트
rows = 6
cols = 6
table = [[0] * cols for i in range(rows)]
인덱싱을 통한 접근
s = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]
]
print(s[0]) # 첫 번째 행 전체: [1, 2, 3, 4, 5]
print(s[1][2]) # 두 번째 행, 세 번째 열: 8
반복문을 이용한 2차원 리스트 순회
rows = len(s) # 행의 개수
cols = len(s[0]) # 열의 개수
for r in range(rows):
for c in range(cols):
print(s[r][c], end=" ")
print() # 한 행이 끝나면 줄바꿈
list = [["Seoul", 10], ["Paris", 12], ["London", 50]]
# 리스트 안에 문자열과 숫자를 함께 저장할 수 있음
# 문자열에 대한 인덱싱도 가능
print(list[0][0][0]) # "Seoul"의 첫 번째 글자: 'S'
# 더 복잡한 다차원 리스트
list = ["atom", ["bold", ["crew", ["date", "easy", 45]]]]
딕셔너리란?
딕셔너리 생성 방법
contacts = {'Kim': '01012345678', 'Park': '01012345679', 'Lee': '01012345680'}
dic = dict()
dic['kim'] = 23
dic[20001] = 22 # 키는 문자열뿐만 아니라 정수형도 가능
get(key, default value) ⇒ key의 value를 리턴함(키가 없으면 디폴트 밸류 출력)
데이터 검색
contacts = {'Kim': '01012345678', 'Park': '01012345679', 'Lee': '01012345680'}
print(contacts['Kim']) # '01012345678' (키가 없으면 오류)
print(contacts.get('Kim')) # '01012345678'
print(contacts.get('Choi')) # None (키가 없어도 오류 없음)
print(contacts.get('Choi', "없음")) # '없음' (키가 없을 때 기본값 설정)
키 존재 여부 확인
if "Kim" in contacts:
print("키가 딕셔너리에 있음")
데이터 추가/수정
contacts['Choi'] = '01056781234' # 새 항목 추가
contacts['Kim'] = '01099998888' # 기존 항목 수정
데이터 삭제
phone = contacts.pop("Kim") # 'Kim' 항목을 삭제하고 값을 반환
items() 메소드 활용(for i 도 가능): key, value 함께 출력함
scores = {'Korean': 80, 'Math': 90, 'English': 80}
for item in scores.items():
print(item) # ('Korean', 80), ('Math', 90), ('English', 80)
keys() 메소드 활용
for key in scores.keys():
print(key) # 'Korean', 'Math', 'English'
values() 메소드 활용
for value in scores.values():
print(value) # 80, 90, 80
두 개의 주사위를 굴렸을 때 나오는 숫자의 합을 6x6 크기의 2차원 리스트로 만드는 프로그램을 작성하세요.
풀이:
# 6x6 크기의 2차원 리스트 생성
rows = 6
cols = 6
table = [[0] * cols for i in range(rows)]
# 각 칸에 주사위 합계 저장
for row in range(rows):
for col in range(cols):
table[row][col] = (row+1) + (col+1)
# 결과 출력
print(" ||", end=" ")
for c in range(1, 7):
print("%3d" % (c), end=" ")
print()
print("="*40)
for r in range(6):
print(r+1, "|| ", end="")
for c in range(6):
print("%3d" % table[r][c], end=" ")
print()
학생의 이름과 성적을 딕셔너리로 관리하고, 평균 점수를 계산하는 프로그램을 작성하세요.
풀이:
# 학생 성적 딕셔너리 생성
students = {
'김철수': {'국어': 90, '영어': 85, '수학': 95},
'이영희': {'국어': 78, '영어': 88, '수학': 92},
'박민수': {'국어': 92, '영어': 96, '수학': 98}
}
# 각 학생의 평균 점수 계산 및 출력
for name, scores in students.items():
total = sum(scores.values())
average = total / len(scores)
print(f"{name}의 평균 점수: {average:.2f}")
# 과목별 평균 점수 계산
subjects = ['국어', '영어', '수학']
for subject in subjects:
total = 0
for student in students.values():
total += student[subject]
average = total / len(students)
print(f"{subject} 과목 평균: {average:.2f}")
영단어를 키로, 한글 설명을 값으로 하는 영한 사전을 만들고, 단어 추가, 삭제, 검색 기능을 구현하세요.
풀이:
def create_dictionary():
english_dict = {
'one': '하나',
'two': '둘',
'three': '셋',
'four': '넷',
'five': '다섯'
}
return english_dict
def add_word(dictionary):
eng = input("추가할 영단어를 입력하세요: ")
kor = input("단어의 뜻을 입력하세요: ")
dictionary[eng] = kor
print(f"'{eng}: {kor}'가 사전에 추가되었습니다.")
def delete_word(dictionary):
eng = input("삭제할 영단어를 입력하세요: ")
if eng in dictionary:
meaning = dictionary.pop(eng)
print(f"'{eng}: {meaning}'가 사전에서 삭제되었습니다.")
else:
print(f"'{eng}'는 사전에 없습니다.")
def search_word(dictionary):
eng = input("검색할 영단어를 입력하세요: ")
meaning = dictionary.get(eng, "사전에 등록된 정보가 없음")
print(f"{eng}: {meaning}")
def print_all(dictionary):
print("\n--- 영한 사전 전체 단어 ---")
for eng, kor in dictionary.items():
print(f"{eng}: {kor}")
def main():
dictionary = create_dictionary()
while True:
print("\n=== 영한 사전 프로그램 ===")
print("1. 단어 검색")
print("2. 단어 추가")
print("3. 단어 삭제")
print("4. 전체 단어 출력")
print("5. 종료")
choice = input("메뉴를 선택하세요: ")
if choice == '1':
search_word(dictionary)
elif choice == '2':
add_word(dictionary)
elif choice == '3':
delete_word(dictionary)
elif choice == '4':
print_all(dictionary)
elif choice == '5':
print("프로그램을 종료합니다.")
break
else:
print("잘못된 메뉴입니다. 다시 선택해주세요.")
if __name__ == "__main__":
main()
도시 이름과 인구수를 저장한 2차원 리스트를 만들고, 인구가 많은 순서대로 정렬하여 출력하는 프로그램을 작성하세요.
풀이:
# 도시별 인구 데이터 (도시명, 인구수(만 명))
cities = [
["Seoul", 980],
["Busan", 340],
["Incheon", 290],
["Daegu", 240],
["Daejeon", 150],
["Gwangju", 145],
["Ulsan", 115],
["Suwon", 120]
]
# 인구수(두 번째 요소)를 기준으로 내림차순 정렬
cities.sort(key=lambda x: x[1], reverse=True)
# 결과 출력
print("=== 인구가 많은 순서 ===")
print("순위\t도시명\t인구수(만 명)")
for i, city in enumerate(cities, 1):
print(f"{i}\t{city[0]}\t{city[1]}")
# 인구수 평균 계산
total_population = sum(city[1] for city in cities)
average = total_population / len(cities)
print(f"\n도시 평균 인구: {average:.2f}만 명")
# 평균보다 인구가 많은 도시 찾기
print("\n평균보다 인구가 많은 도시:")
for city in cities:
if city[1] > average:
print(f"{city[0]}: {city[1]}만 명")
두 개의 2차원 리스트(행렬)를 입력받아 같은 위치의 원소를 더한 새로운 행렬을 반환하는 함수를 작성하세요.
예시:
matrix_A = [[1, 2, 3], [4, 5, 6]]
matrix_B = [[7, 8, 9], [10, 11, 12]]
결과: [[8, 10, 12], [14, 16, 18]]
학생들의 이름과 각 과목(국어, 영어, 수학) 점수를 입력받아 성적표를 출력하는 프로그램을 작성하세요. 각 학생별 총점과 평균, 그리고 과목별 평균도 함께 출력하세요.
예시 입력:
students = [
["김철수", 85, 90, 95],
["이영희", 90, 85, 80],
["박민수", 75, 80, 85]
]
예시 출력:
이름 국어 영어 수학 총점 평균
김철수 85 90 95 270 90.0
이영희 90 85 80 255 85.0
박민수 75 80 85 240 80.0
과목평균 83.3 85.0 86.7
N x N 크기의 2차원 리스트(행렬)를 시계 방향으로 90도 회전시키는 함수를 작성하세요.
예시:
원본 행렬:
1 2 3
4 5 6
7 8 9
90도 회전 후:
7 4 1
8 5 2
9 6 3
주어진 문장에서 각 단어의 등장 횟수를 계산하여 딕셔너리로 반환하는 함수를 작성하세요. 대소문자는 구분하지 않고, 특수문자는 제외합니다.
예시:
sentence = "Python is easy to learn. Python is popular and Python is powerful."
결과: {'python': 3, 'is': 3, 'easy': 1, 'to': 1, 'learn': 1, 'popular': 1, 'and': 1, 'powerful': 1}
선거에서 투표한 결과를 리스트로 받아, 각 후보자별 득표수를 딕셔너리로 반환하고, 가장 많은 표를 받은 후보자를 출력하는 프로그램을 작성하세요.
예시:
votes = ["김후보", "이후보", "김후보", "박후보", "이후보", "김후보", "최후보", "김후보", "이후보", "박후보"]
결과:
투표 결과: {'김후보': 4, '이후보': 3, '박후보': 2, '최후보': 1}
당선인: 김후보 (4표)
학생들의 성적을 관리하는 프로그램을 작성하세요. 다음 기능을 구현하세요:
도서관에서 사용할 도서 관리 시스템을 구현하세요. 다음 기능을 포함해야 합니다:
요일별 일정을 관리하는 프로그램을 작성하세요. 2차원 리스트와 딕셔너리를 활용하여 다음 기능을 구현하세요:
문제 풀이 시, 다음 형식으로 답안을 작성하세요: