SWEA 파이썬 프로그래밍 기초(2) 파이썬의 기본 응용 #2


데이터에 대해 순서를 가진 자료구조 총칭 ex) 리스트, 튜플


  • 대괄호 [] 안에 서로 다른 자료형의 값을 콤마(,)로 구분해 하나 이상 저장할 수 있는 컬렉션 자료형
  • 개별 항목은 0부터 시작하는 인덱스를 이용해 접근
  • 저장된 항목 변경 가능

# 리스트의 literal = [ , , , ] data_list = [10, 21.5, "파이썬", True] print("{0} {1}".format(type(data_list), data_list)) # <class 'list'> [10, 21.5, '파이썬', True] data_list = list(range(10, 21, 2)) print("{0} {1}".format(type(data_list), data_list)) # <class 'list'> [10, 12, 14, 16, 18, 20] data_str = "안녕하세요" data_list = list(data_str) print("{0} {1}".format(type(data_list), data_list)) # <class 'list'> ['안', '녕', '하', '세', '요']

N개의 원소라면 인덱스는 -N 부터 시작하여 -1로 끝남

data_list = [10, 20, 30, 40, 50] print("data_list[-5] => {0}".format(data_list[-5])) print("data_list[-4] => {0}".format(data_list[-4])) print("data_list[-3] => {0}".format(data_list[-3])) print("data_list[-2] => {0}".format(data_list[-2])) print("data_list[-1] => {0}".format(data_list[-1])) [결과] data_list[-5] => 10 data_list[-4] => 20 data_list[-3] => 30 data_list[-2] => 40 data_list[-1] => 50

lst.index(element) 함수를 통해 element가 list 내에서 가지는 인덱스를 구할 수 있다.

data_list = [10, 20, 30, 40, 50] print("data_list.index(20) => {0}".format(data_list.index(20))) [결과]] data_list.index(20) => 1

data_list1, data_list2 = [10, 20, 30], [40, 50] # 리스트의 덧셈 : 결합 print("{0} + {1} => {2}\n".format(data_list1, data_list2, data_list1 + data_list2)) # [10, 20, 30] + [40, 50] => [10, 20, 30, 40, 50] # 리스트의 곱셈 : 반복 print("{0} * 2 => {1}\n".format(data_list1, data_list1 * 2)) print("{0} * 3 => {1}\n".format(data_list2, data_list2 * 3)) # [10, 20, 30] * 2 => [10, 20, 30, 10, 20, 30] # [40, 50] * 3 => [40, 50, 40, 50, 40, 50]

맨 뒤에 element를 이어붙인다. list.append(element)의 형식으로 사용한다.

data_list = [10, 20, 30, 40] print("data_list: {0}".format(data_list)) data_list.append(50) data_list.append(60) print("data_list: {0}".format(data_list)) [결과] data_list: [10, 20, 30, 40] data_list: [10, 20, 30, 40, 50, 60]

원하는 인덱스의 자리에 element를 삽입한다. list.insert(index, element)의 형식으로 사용한다.

data_list = [10, 20, 30, 40] data_list.insert(2, 25) print("data_list: {0}".format(data_list)) [결과] data_list: [10, 20, 25, 30, 40]

append() 함수와 같이 리스트의 맨 뒤에 원소를 이어 붙인다. 하지만 큰 차이점은 시퀀스 객체를 괄호 안에 넣었을 때, extend()는 하나하나 리스트에 집어넣지만, append()는 그 자체를 하나의 원소로 간주하여 집어넣는다는 것이다.

data_list = [10, 20, 30, 40] data_list.extend([70, 80]) data_list.append([90, 100]) print("data_list: {0}".format(data_list)) [결과] data_list: [10, 20, 30, 40, 70, 80, [90, 100]]

# 1. 인덱스 지정 data_list = [10, 20, 30, 40] data_list[2] = 29 print("data_list: {0}".format(data_list)) # [결과] data_list = [10, 20, 29, 40] # 2. 인덱스 범위 지정 data_list = [10, 20, 30, 40] data_list[1:3] = [12, 15] # 범위 연산자의 마지막 값(3)은 실제 범위에 미포함 print("data_list: {0}".format(data_list)) # [결과] data_list: [10, 12, 15, 40] # 3. 인덱스 범위가 다를 때 data_list = [10, 20, 30, 40] data_list[1:3] = [12, 15, 20] # 범위 연산자의 마지막 값(3)은 실제 범위에 미포함 print("data_list: {0}".format(data_list)) # [결과] data_list: [10, 12, 15, 20, 40] -> 전체 리스트의 크기가 변경

  • del lst[idx] : 특정 원소를 인덱스를 찾아 제거
  • lst.pop(idx) : 특정 원소를 인덱스를 통해 찾아 제거
  • remove(element) : 특정 원소를 값을 통해 찾아 제거
  • lst.clear() : 모든 원소 제거해 빈 리스트 생성
data_list = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] del data_list[2] print("data_list: {0}".format(data_list)) # [결과] data_list: [10, 20, 40, 50, 60, 70, 80, 90, 100] # data_list[2] : 30 제거 del data_list[3:5] print("data_list: {0}".format(data_list)) # [결과] data_list: [10, 20, 40, 70, 80, 90, 100] # data_list[3:5] : 3번, 4번인 50, 60 제거 data_list.pop(5) print("data_list: {0}".format(data_list)) # [결과] data_list: [10, 20, 40, 70, 80, 100] data_list.remove(100) print("data_list: {0}".format(data_list)) # [결과] data_list: [10, 20, 40, 70, 80] data_list.clear() print("data_list: {0}".format(data_list)) # [결과] data_list: []

element in list로 검사 반대로 없는지 확인하려면 not in을 이용한다.

data_list = [10, 20, 30, 50, 50, 50, 60, 70, 80] print("50 in data_list => {0}".format(50 in data_list)) print("50 not in data_list => {0}".format(50 not in data_list)) print("data_list.count(50) => {0}".format(data_list.count(50))) print("data_list.count(55) => {0}".format(data_list.count(55))) [결과] 50 in data_list => True 50 not in data_list => False data_list.count(50) => 3 data_list.count(55) => 0

data_list = list(range(0, 11, 2)) for item in data_list: print("{0}".format(item), end = " ") # 반복문을 수행하는 동안 항목이 가로로 출력 print() for idx, item in enumerate(data_list): print("data_list[{0}] => {1}".format(idx, item)) [결과] 0 2 4 6 8 10 data_list[0] => 0 data_list[1] => 2 data_list[2] => 4 data_list[3] => 6 data_list[4] => 8 data_list[5] => 10

data_list1 = [1, 2, 3, 4, 5] print("data_list1: {0} {1}".format(type(data_list1), data_list1)) # [결과] data_list1: <class 'list'> [1, 2, 3, 4, 5] data_list2 = [] for item in data_list1: data_list2.append(item) print("data_list2: {0} {1}".format(type(data_list2), data_list2)) # [결과] data_list2: <class 'list'> [1, 2, 3, 4, 5] # 반복 가능한 자료형의 경우 literal 안에서 for문을 사용하면 내포 기능 사용 가능 data_list3 = [item for item in data_list1] print("data_list3: {0} {1}".format(type(data_list3), data_list3)) # [결과] data_list3: <class 'list'> [1, 2, 3, 4, 5] data_list4 = [] for item in data_list1: if item % 2 == 1: data_list4.append(item) print("data_list4: {0} {1}".format(type(data_list4), data_list4)) # [결과] data_list4: <class 'list'> [1, 3, 5] # list literal 안에서 for문 사용 data_list5 = [item for item in data_list1 if item % 2 == 1] print("data_list5: {0} {1}".format(type(data_list5), data_list5)) # [결과] data_list5: <class 'list'> [1, 3, 5] data_list6 = [item for item in data_list1 if item % 2 == 0] print("data_list6: {0} {1}".format(type(data_list6), data_list6)) # [결과] data_list6: <class 'list'> [2, 4] data_list7 = [] for x in data_list1: if x % 2 == 1: # x = [1, 3, 5] for y in data_list1: if y % 2 == 0: # y = [2, 4] data_list7.append(x * y) # 각각 곱셈 연산한 것을 append print("data_list7: {0} {1}".format(type(data_list7), data_list7)) # [결과] data_list7: <class 'list'> [2, 4, 6, 12, 10, 20] data_list8 = [x * y for x in data_list1 if x % 2 == 1 for y in data_list1 if x % 2 == 0] print("data_list8: {0} {1}".format(type(data_list8), data_list8)) # [결과] data_list8: <class 'list'> [2, 4, 6, 12, 10, 20] data_str = "Hello, Python!" data_list9 = [item.lower() for item in data_str] # [해석] data_list9는 data_str의 각 항목에 대해 소문자화 한 항목들의 리스트이다. print("data_list9: {0} {1}".format(type(data_list9), data_list9)) # [결과] data_list9: <class 'list'> ['h', 'e', 'l', 'l', 'o', ',', ' ', 'p', 'y', 't', 'h', 'o', 'n', '!']

  • 소괄호() 안에 서로 다른 자료형의 값을 콤마(,)로 구분해 하나 이상 저장할 수 있는 컬렉션 자료형
  • 개별 항목은 0부터 시작하는 인덱스를 이용해 접근
  • 저장된 항목 변경 불가
data_tuple = (10, 21.5, "파이썬", True) print("{0} {1}".format(type(data_tuple), data_tuple)) # [결과] <class 'tuple'> (10, 21.5, '파이썬', True) data_tuple = tuple(range(10, 21, 2)) print("{0} {1}".format(type(data_tuple), data_tuple)) # [결과] <class 'tuple'> (10, 12, 14, 16, 18, 20) data_str = "안녕하세요" data_tuple = tuple(data_str) print("{0} {1}".format(type(data_tuple), data_tuple)) # [결과] <class 'tuple'> ('안', '녕', '하', '세', '요')

대부분 리스트와 비슷하여 생략한다.


리스트 객체를 활용해 총점과 평균 구하기

[결과1] 총 학생 수를 입력하세요: 3 학생1의 국어 점수를 입력하세요: 100 학생1의 수학 점수를 입력하세요: 90 학생1의 영어 점수를 입력하세요: 80 학생2의 국어 점수를 입력하세요: 90 학생2의 수학 점수를 입력하세요: 88 학생2의 영어 점수를 입력하세요: 96 학생3의 국어 점수를 입력하세요: 88 학생3의 수학 점수를 입력하세요: 75 학생3의 영어 점수를 입력하세요: 78 학생1 => 총점 : 270, 평균 : 90.00 학생2 => 총점 : 274, 평균 : 91.33 학생3 => 총점 : 271, 평균 : 80.33


# -*- coding: utf-8 -*- # calcSumAvgScores.py num_total = int(input("총 학생 수를 입력하세요: ")) total = [] avg = [] for i in range(0, num_total): score_kor = int(input("학생{0}의 국어 점수를 입력하세요: ".format(i + 1))) score_math = int(input("학생{0}의 수학 점수를 입력하세요: ".format(i + 1))) score_eng = int(input("학생{0}의 영어 점수를 입력하세요: ".format(i + 1))) score_total = score_kor + score_math + score_eng score_avg = score_total / 3 total.append(score_total) avg.append(score_avg) for i in range(0, num_total): print("학생{0} => 총점 : {1}, 평균 : {2:.2f}".format(i + 1, total[i], avg[i]))

# -*- coding: utf-8 -*- # calcSumAvgScores.py scores = [] count = int(input("총 학생 수를 입력하세요: ")) for i in range(1, count + 1): score = [] kor = int(input("학생{0}의 국어 점수를 입력하세요: ".format(i))) score.append(kor) math = int(input("학생{0}의 수학 점수를 입력하세요: ".format(i))) score.append(math) eng = int(input("학생{0}의 영어 점수를 입력하세요: ".format(i))) score.append(eng) scores.append(score) for i, score in enumerate(scores): total = 0 for s in score: total += s print("학생{0} => 총점: {1}, 평균: {2:0.2f}".format( i + 1, total, total / len(score)))