Python 은 학생 연령 에 따라 순 위 를 매 기 는 실제 문제 에 대한 상세 한 설명 을 실현 합 니 다.
본 고 는 주로 Python 을 이용 하여 학생 의 연령 에 따라 순 위 를 매 기 는 것 과 관련 된 내용 을 공유 하여 여러분 에 게 참고 학습 을 제공 합 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 살 펴 보 겠 습 니 다.
질문:클래스 정의:이름 name,성별 gender,나이 age 를 포함 하여 나이 에 따라 학생 들 에 게 순 위 를 매 겨 야 합 니 다.
입력:학생 대상 을 포함 하 는 List.
출력:나이 에 따라 정렬 된 List.
사고방식 1:거품 순 서 를 사용 하여 비교적 인접 한 학생 들 이 첫 번 째 학생 의 age 값 이 두 번 째 학생 의 age 값 보다 크 면 전체적으로 이 두 요 소 를 교환한다.매번 점점 적어 지 는 요소 에 대해 위의 절 차 를 반복 합 니 다.한 쌍 의 학생 도 비교 할 필요 가 없 을 때 까지.
사고방식 2:Python 을 사용 하여 천천히ǚ피망 sorted().
(이 문 제 는 필자 가 면접 을 볼 때 손 으로 쓴 실제 문제 로 소 백 을 대상 으로 한다.우 리 는 이런 간단 한 문 제 를 통 해 Python 의 기초 지식 을 복습 할 수 있다)
1.사전 준비
1.1 정의 클래스
class Student(object):
def __init__(self, name, gender, age):
self.__name = name
self.__gender = gender
self.__age = age
# age
def getAge(self):
return self.__age
#
def printStudent(self):
return self.__name, self.__gender, self.__age
1.2 무 작위 학생 대상 을 포함 하 는 List 생 성
# list
def generateStudent(num):
# num
list = []
for i in range(num):
randName = ''.join(random.sample(string.ascii_letters, 4))
randGender = random.choice(['Male', 'FeMale'])
randAge = random.randint(10,30)
s = Student(randName, randGender, randAge)
list.append(s)
return list
2.정렬 시작2.1 거품 정렬 사용
사고 방향 은 이미 처음에 소개 되 었 고 우 리 는 코드 를 직접 보 았 다.
def sortStudent(list):
for i in range(len(list)):
for j in range(1, len(list)-i):
if list[j-1].getAge() > list[j].getAge():
list[j-1], list[j] = list[j], list[j-1]
return list
2.2 파 이 썬 을 사용한다ǚ피망 정렬lambda 표현 식 에 맞 춰 사용 합 니 다.매우 간결 합 니 다.코드 는 다음 과 같 습 니 다.
sorted(list, key=lambda student: student.getAge()) # age Key
sorted()와 lambda 표현 식 에 관 한 지식 을 보충 합 니 다.2.2.1 sorted(iterable, *, key=None, reverse=False)
공식 문서
매개 변수 에 대한 설명:
key specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None (compare the elements directly).
reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.
The built-in sorted() function is guaranteed to be stable.
(공식 문 서 를 본 설명 에 따 르 면 이 방법 은 안정 을 보장 합 니 다!)
원리:Python 에 내 장 된 sorted()방법 뒤에 사 용 된 것 은 Timsort 알고리즘 입 니 다.데이터 가 Ordered Data 에 가 까 울 수록 시간 복잡 도 는 O(N)에 가 깝 습 니 다.우리 의 이 문제 에서 연령 속성 은 Ordered Data 에 비교적 부합된다.관심 있 는 것 은 Timsort 를 클릭 하여 더 많은 것 을 볼 수 있 습 니 다!
2.2.2 lambda 표현 식
그냥 간단 한 예 를 보시 면 아 실 거 예요.
>>> pairs = [('one',1),('two',2),('three',3),('five',5),('zero',0),('four',4)]
>>> sorted(pairs, key=lambda pair: pair[1]) # List tuple tuple 2
[('zero', 0), ('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)]
3.테스트 수행테스트 용 무 작위 데 이 터 를 구축 하여 두 가지 방법의 실행 시간 을 계산 하여 비교 합 니 다~
if __name__ == '__main__':
# list [('hZDw', 'FeMale', 17)...]
list = generateStudent(10000)
# 1:
start_Time1 = time.time()
sortStudent(list)
end_Time1 = time.time()
# 1 , 10000 22.243 ( )
print('%s cost time %s' % ('sortStudent' , end_Time1 - start_Time1))
# 2: Python sorted +lambda
# sorted timsort , Ordered data , O(N)。
# , Ordered data 。
start_Time2 = time.time()
sorted(list, key=lambda student: student.getAge()) # Key
end_Time2 = time.time()
print('%s cost time %s' % ('sorted' , end_Time2 - start_Time2))
테스트 결과:사용 방법 1(거품 정렬),테스트 데이터 가 10000 개 일 때 정렬 시간 은 22.243 초 정도 입 니 다.
사용법 2(천천히ǚ고추.ǎ,테스트 데이터 가 1000000 개 일 때 정렬 시간의 0.575 초 정도 입 니 다.
정확 하 지 는 않 지만 차 이 는 분명 보 입 니 다!
이상
잘못 이 있 으 면 지적 해 주세요~
전체 구현 및 테스트 는 Github 에서 찾 을 수 있 습 니 다:ActualProblem-Solution
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.