본문 바로가기
IT/파이썬 라이브러리 (Python)

#013 파이썬 라이브러리 : bisect를 이용한 학점 부여

by DoitSQL 2023. 4. 8.
728x90

파이썬 라이브러리 bisect

#013 파이썬 라이브러리 : bisect를 이용한 학점 부여

bisect를 이용한 학점 부여

Python의 bisect 모듈은 정렬된 순서를 유지하기 위해 요소를 삽입해야 하는 정렬된 목록의 위치를 ​​찾는 데 사용되는 bisect()라는 함수를 제공합니다. 이 함수는 정렬된 목록과 삽입할 요소의 두 가지 인수를 사용합니다.

 

bisect() 함수는 요소가 삽입되어야 하는 인덱스를 반환합니다. 요소가 목록에 이미 있는 경우 함수는 왼쪽이 아닌 오른쪽으로 삽입되는 인덱스를 반환합니다.


bisect() 함수의 구문

bisect.bisect(sorted_list, element, lo=0, hi=len(sorted_list))

▶ 설명

여기서 sorted_list는 요소가 삽입될 정렬된 목록이고 element는 삽입될 요소이고 lo는 검색 범위의 하한 인덱스(기본값은 0)이며 hi는 검색 범위의 상한 색인(기본값은 정렬된 목록의 길이임).

 

예 제1

import bisect

numbers = [1, 3, 4, 6, 8, 9]
position = bisect.bisect(numbers, 5)

print("Position to insert 5 in the list:", position)

▶ 결과

Position to insert 'berry' in the list: 4

▶ 설명

즉, 숫자 5를 '숫자' 목록에 삽입하면 정렬된 순서를 유지하기 위해 인덱스 3에 삽입됩니다.

 

예 제2

import bisect

words = ['apple', 'banana', 'cherry', 'date', 'elderberry']
position = bisect.bisect(words, 'berry')

print("Position to insert 'berry' in the list:", position)

▶ 결과

Position to insert 'berry' in the list: 2

▶ 설명

즉, 'berry'라는 단어를 words 목록에 삽입하면 정렬된 순서를 유지하기 위해 인덱스 2에 삽입됩니다.

 

요약하면 bisect() 함수는 정렬된 목록에 요소를 삽입하기 위한 올바른 인덱스를 찾는 데 유용한 도구입니다. 특히 대규모 데이터 세트의 경우 목록의 정렬된 순서를 효율적으로 유지하는 데 사용할 수 있습니다.


학점 부여하기

bisect() 함수의 특성을 이용하여 성적에 따른 학점을 부여할 수 있습니다.

 

점수가 46, 99, 60, 75, 88, 73, 90, 100, 90이고

90점 이상: A, 80점 이상: B, 70점 이상: C, 60점 이상: D, 59점 이하: F

학점을 부여하는 코드를 만들어보겠습니다.

 

if 문을 이용하는 방법은 누구나 할 수 있을 것입니다. 여기서는 앞에서 배운 bisect.bisect() 함수를 사용해 보겠습니다.

# -*- coding:utf-8 -*-
import bisect

# 성적
scores = [46, 99, 60, 75, 88, 73, 90, 100, 90]
# 학점기준
grades = [60, 70, 80, 90]
# 학점
points = ['F', 'D', 'C', 'B', 'A']

result = []
for score in scores:
    # 학점기준에 점수가 들어갈 위치
    grade_index = bisect.bisect(grades, score)
    # 학점 부여
    grade = points[grade_index]
    # 결과 추가
    result.append(grade)

#결과 출력
print(result)

▶ 결과

['F', 'A', 'D', 'C', 'B', 'C', 'A', 'A', 'A']

▶ 설명

1. 성적에 부여할 학점기준과 학점을 정의합니다.

 

2. 각각의 성적에 대해서

    2.1 학점기준의 어디에 삽입될지 인덱스를 찾습니다.

          70점이나 90점같이 학점을 구분하는 점수와 같다면

          bisect() 함수는 왼쪽이 아닌 오른쪽으로 삽입되는 인덱스를 반환합니다.

         경우에 따라서 왼쪽으로 삽입되는 인덱스를 반환하고 싶다면

          bisect_left를 사용해야 합니다.

    2.2 인덱스에 해당하는 학점을 부여합니다.

    2.3 부여된 학점을 저장합니다.

 

3. 저장된 학점을 출력합니다.


bisect.insort() 함수

bisect.insort() 함수는 목록의 정렬된 순서를 유지하면서 정렬된 목록에 요소를 삽입하는 데 사용되는 Python 메서드입니다. bisect.insort() 함수는 정렬된 목록과 삽입할 요소의 두 가지 인수를 사용합니다.

import bisect

sorted_list = [1, 3, 5, 7, 9]
bisect.insort(sorted_list, 4)
print(sorted_list)

▶ 결과

[1, 3, 4, 5, 7, 9]

▶ 설명

bisect.insort() 함수는 목록의 정렬된 순서를 유지하면서 값 4를 정렬된 목록의 올바른 위치에 삽입합니다.


감사합니다.

 

Do it! SQL을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다.

 

728x90

댓글