(Python) 객체 정렬 – 클래스, 튜플 객체 정렬. 람다. 오름차순. 내림차순. 문자열을 알파벳순으로

1. 클래스를 사용하여 개체 정렬

● 한국어, 수학, 영어 점수를 포함한 학생 정보 제공 시, 오름차순으로 언어 점수별로 정렬만들다

열쇠논쟁에 그것을 밖으로 정렬정의 함수를 전달해야 합니다.

– 한국어 점수 상승 단순 정렬 ​​기준인 경우 익명 기능 람다그걸 써

– 람다 이름 없이 사용할 수 있는 기능~이다

● 예를 들어 값을 두 배로 해서 반환하는 함수는 다음과 같습니다.

def f(x):
    return x*2

print(f(5))

결과

10

– 이를 lambda로 작성하면 다음과 같다.

f=lambda x:x*2
print(f(5))

결과

10

– 인수 값이 위와 같은 경우 람다 이후 엑스쓰다, : 뒤쪽에~을 위한 반환된 값유형


여기서 기다려!
람다를 사용하여 객체를 정렬하기 전에 먼저 일반적인 람다 정렬에 대해 알아봅시다.

◆ 람다 정렬

a=(1,2,3,4,5,6,7,8,9)
a.sort(key=lambda x:x%2)
print(a)

– 위 코드에서 xa는 리스트의 요소이고 람다의 반환값은 x%2입니다.

a에 따른 반환 값은 다음과 같습니다.

(1,0,1,0,1,0,1,0,1,0)

– 따라서 반환 값을 기준으로 오름차순 정렬은 다음과 같습니다.

(0,0,0,0,1,1,1,1,1)
# 이에 따른 a의 원소는 (2,4,6,8,1,3,5,7,9)

결과

(2, 4, 6, 8, 1, 3, 5, 7, 9)

– 위와 같이 람다를 사용하는 경우 반환 값을 기반으로로 정렬됩니다.


a=(1,2,3,4,5,6,7,8,9)
a.sort(key=lambda x:-x)
print(a)

– 코드의 반환 값이 -x이므로 반환 값을 다음과 같이 정렬합니다.

(-9, -8, -7, -6, -5, -4, -3, -2, -1)

– 따라서 반환 값으로 정렬하여 결과를 도출하면 다음과 같은 결과가 나옵니다.

(9, 8, 7, 6, 5, 4, 3, 2, 1)

– 게다가 내림차순기본적으로 반환 값으로 정렬 추가하다


a=(1,2,3,4,5,6,7,8,9)
a.sort(key=lambda x:x%2==0)
print(a)

– 이때 반환 조건이 x%2==0이면 어떻게 됩니까?

– 반환 조건이 x%2인지 비교해보자.

x=3
y=4
print(x%2==1)
print(y%2==1)

결과

True
False

– 위의 코드와 같이 숫자를 2로 나누고 나머지가 1일 때 홀수인지 판단하는 코드입니다.

– 답은 이거야 진실 또는 거짓말나올 것이다

– 그럼 거짓과 진실을 비교하면 어느 것이 더 큽니까?

print(True>False)
print(True==False)
print(True<False)

결과

True
False
False

– 실제로 비교 진실은 거짓보다 위대하다볼 수 있다

– 따라서 반환 값은 x%2==0 거짓말즉, x가 홀수인 값을 먼저 정렬해야 합니다.

a=(1,2,3,4,5,6,7,8,9)
a.sort(key=lambda x:x%2==0)
print(a)

# (1, 3, 5, 7, 9, 2, 4, 6, 8)


– 그럼 객체 정렬에 대해 진지하게 살펴보겠습니다.

– 한국어 점수를 기준으로 오름차순으로 정렬해 봅시다.

– 반이 결정되고 국어, 수학, 영어 5명의 학생 성적을 입력한 후 성적을 출력한다.

class Student:
    def __init__(self,kor,math,eng):
        self.kor=kor
        self.math=math
        self.eng=eng

input_data=(tuple(input().split()) for _ in range(5))
students=(Student(int(kor),int(math),int(eng)) for kor, math, eng in input_data)
print()
for student in students:
    print(student.kor,student.math,student.eng)

결과

>> 30 50 60
>> 70 60 90
>> 30 40 70
>> 20 60 40
>> 90 60 50

30 50 60
70 60 90
30 40 70
20 60 40
90 60 50

students.sort(key=lambda x:x.kor)

엑스학생 목록의 요소입니다.
학생(한,수,영)객체~이다

x.cor학생의 한국어 꿀왜냐하면 한국어 성적이를 바탕으로 오름차순 종류.

class Student:
    def __init__(self,kor,math,eng):
        self.kor=kor
        self.math=math
        self.eng=eng

input_data=(tuple(input().split()) for _ in range(5))
students=(Student(int(kor),int(math),int(eng)) for kor, math, eng in input_data)
print()
for student in students:
    print(student.kor,student.math,student.eng)
print()
students.sort(key=lambda x:x.kor)
for student in students:
    print(student.kor,student.math,student.eng)

결과

30 50 60
70 60 90
30 40 70
20 60 40
90 60 50

# 정렬 전
30 50 60
70 60 90
30 40 70
20 60 40
90 60 50

# 정렬 후
20 60 40
30 50 60
30 40 70
70 60 90
90 60 50

– 이 시간 수학 포인트 기준 내림차순정리하자

class Student:
    def __init__(self,kor,math,eng):
        self.kor=kor
        self.math=math
        self.eng=eng

input_data=(tuple(input().split()) for _ in range(5))
students=(Student(int(kor),int(math),int(eng)) for kor, math, eng in input_data)
print()
for student in students:
    print(student.kor,student.math,student.eng)
print()
students.sort(key=lambda x: -x.math)
for student in students:
    print(student.kor,student.math,student.eng)

– 내림차순으로 표준 수학 점수 그대로 X. 수학~을 위한 추가하여 해결

30 50 60
70 60 90
30 40 70
20 60 40
90 60 50

# 정렬 전
30 50 60
70 60 90
30 40 70
20 60 40
90 60 50

# 정렬 후
70 60 90
20 60 40
90 60 50
30 50 60
30 40 70


2. 카드를 이용한 물건 분류

거의, 람다그걸 써

– 이때 람다에서 x의 값국어, 수학, 영어 성적 튜플 이것은 양식입니다.

– 한국어 점수는 시리즈의 0번째 지수이기 때문에 한국어 점수 기준 오름차순 정렬하면 엑스(0)반환 값으로.

– 또한 수학 점수는 배열의 첫 번째 색인이므로 수학 등급 내림차순 정렬하면 -x (1)반환 값으로.

input_data=(tuple(input().split()) for _ in range(5))
students=((int(kor),int(math),int(eng)) for kor, math, eng in input_data)

print()
for kor,math,eng in students:
    print(kor, math, eng)

print()
students.sort(key=lambda x: x(0))
for kor,math,eng in students:
    print(kor, math, eng)

print()
students.sort(key=lambda x: -x(1))
for kor,math,eng in students:
    print(kor, math, eng)

결과

30 50 60
70 60 90
30 40 70
20 60 40
90 60 50

# 정렬 전
30 50 60
70 60 90
30 40 70
20 60 40
90 60 50

# 국어 성적 기준
20 60 40
30 50 60
30 40 70
70 60 90
90 60 50

# 수학 성적 기준 내림차순
20 60 40
70 60 90
90 60 50
30 50 60
30 40 70


3. 개체를 행별로 정렬

– 정렬 및 람다를 사용합니다.

– X 팩터 튜플때 x(k). 열광한값을 반환하는 경우 엑스(케이)당신이 말하는 경우 알파벳 순서정렬 기준

input_data=(tuple(input().split()) for _ in range(5))
students=((int(kor),int(math),int(eng),name) for kor, math, eng, name in input_data)

print()
students.sort(key=lambda x: x(3))
for kor,math,eng,name in students:
    print(kor, math, eng,name)

결과

>> 30 50 60 john 
>> 70 60 90 tom 
>> 30 40 70 max
>> 20 60 40 jane
>> 90 60 50 beo

90 60 50 beo
20 60 40 jane
30 50 60 john
30 40 70 max
70 60 90 tom

– 반면 값은 내림차순으로 반환 네가 떠난다면 잘못된파리

input_data=(tuple(input().split()) for _ in range(5))
students=((int(kor),int(math),int(eng),name) for kor, math, eng, name in input_data)

print()
students.sort(key=lambda x: -x(3))
for kor,math,eng,name in students:
    print(kor, math, eng,name)

결과

TypeError: bad operand type for unary -: 'str'

– 반환 값입니다.
열광한이 때문에 – 추가할 수 없습니다.

숫자반죽 – 절대값이 크면 더 크게 작은 왜냐하면 내림차순로 할 수 있었다

– 이를 해결하기 위해 가나다순으로 정렬한 후, 반전=참추가하다

input_data=(tuple(input().split()) for _ in range(5))
students=((int(kor),int(math),int(eng),name) for kor, math, eng, name in input_data)

print()
students.sort(key=lambda x: x(3),reverse=True)
for kor,math,eng,name in students:
    print(kor, math, eng,name)

결과

>> 30 50 60 john 
>> 70 60 90 tom 
>> 30 40 70 max
>> 20 60 40 jane
>> 90 60 50 beo

70 60 90 tom
30 40 70 max
30 50 60 john
20 60 40 jane
90 60 50 beo

수업다음을 사용하여 행별로 정렬

class Student:
    def __init__(self,kor,math,eng,name):
        self.kor=kor
        self.math=math
        self.eng=eng
        self.name=name

input_data=(tuple(input().split()) for _ in range(5))
students=(Student(int(kor),int(math),int(eng),name) for kor, math, eng, name in input_data)

print()
students.sort(key=lambda x: x.name)
for student in students:
    print(student.kor, student.math, student.eng,student.name)

print()
students.sort(key=lambda x: x.name,reverse=True)
for student in students:
    print(student.kor, student.math, student.eng,student.name)

결과

30 50 60 john 
70 60 90 tom 
30 40 70 max
20 60 40 jane
90 60 50 beo

# 이름 사전순
90 60 50 beo
20 60 40 jane
30 50 60 john
30 40 70 max
70 60 90 tom

# 이름 사전역순
70 60 90 tom
30 40 70 max
30 50 60 john
20 60 40 jane
90 60 50 beo


코드 노트

GitHub – KimDongHyun0907/python-study

GitHub에서 계정을 생성하여 KimDongHyun0907/python-study 개발에 기여하십시오.

github.com