SOCO

append, split, sorted, items 등 본문

백/python

append, split, sorted, items 등

ssooda 2021. 7. 5. 21:40

# 코딩테스트 대회가 개최되었습니다. 이 때, 참여자들 이름을 공백을 통해 구분을 하여 입력을 합니다.
# 예) "홍길동" "김길동" "최길동"
# 그 후 코딩테스트에서 순차대로 각 대회에서 맞춘 문제를 공백을 통해 구분하여 입력이 됩니다.

# 예) 2 10 4
# 만약 중간에 기권을 했을 경우 '기권'이라고 입력이 됩니다.
# 예) 2 10 기권
# 이 때 기권을 하지 않은 학생들의 성적의 평균을 넘긴 학생들만은 참가상을 모두 받을 수 있습니다.
# 참가상을 받은 학생들을 푼 점수가 높은 순서대로 공백으로 구분하여 출력해 주세요

 

names = input().split(' ')
#print("참가자", names)


scores = input().split(' ')
#print("점수", sores)


score = {}
for i in range(len(scores)):
    s = scores[i]
    if s!='기권':
        score[names[i]] = int(s)
#print("기권 아닌 사람들 딕셔너리", score)


ans = sorted(score.items(), key=lambda x: x[1], reverse=True)
print("리스트를 정렬",ans)

avg = sum(score.values())/len(score.values())
print("평균", avg)

for i in ans:
	print("이름, 점수", i)
    if i[1]<avg:
        break
    else:
        print(i[0], end=' ')

 

1. split

문자열을 구분자를 기준으로 나누고, 배열로 만들어준다

names = input().split(' ')
#print("참가자", names)


scores = input().split(' ')
#print("점수", sores)

blank(" ")를 기준으로 input받은 문자열을 쪼개서(split) 배열로 만들어서 변수에 저장

 

 

2. 딕셔너리에 새로운 key:value 넣기

dict_name[key_name] = value_content

score = {}
for i in range(len(scores)):
    s = scores[i]
    if s!='기권':
        score[names[i]] = int(s)

scores배열에 있는 값을 차례로 넣어서 검사함(for 반복문)

scores의 요소가 기권이 아니면 score 이라는 dict에 추가함

이름을 key, 점수를, value로!

 

 

3. dict_name.items(), sorted(key, reverse)

1)dict_name.items()

딕셔너리에서 키와 벨류를 튜플로 묶은 값을 반환함 => 리스트처럼 사용 가능

 

2) sorted(list, key, value)

리스트를 정렬해서 새로운 리스트를 만들어냄 => sort와 다름

sorted에서 key는 어떤 것을 기준으로 정렬할 것인지를 나타내줌

reverse = True 는 역순으로 정렬하는 것을 나타냄(내림차순)  -> 디폴트는 오름차순임

 

4. 람다

def 함수이름(매개변수) :
	return 결과
   
lambda 매개변수 : 결과
ans = sorted(score.items(), key=lambda x: x[1], reverse=True)

score이라는 딕셔너리에서 각 키와 벨류를 튜플로 묶어 리스트 생성

각 튜플의 index가 1인, 즉 2번째 값을 기준으로 해당 리스트를 정렬

이때, 오름차순이 아니라 내림차순으로 정렬

이렇게 만들어진 리스트를 ans에 대입

 

즉 ans는 튜플들로 이루어진 리스트로, 해당 튜플의 두번째 값인 점수를 기준으로 내림차순으로 정렬되어있음

 

5. 반복문과 break

for i in ans:
    if i[1]<avg:
        break
    else:
        print(i[0], end=' ')

ans에 있는 각 요소(각 튜플)을 차례대로 i에 저장

만약 각 튜플의 두번째 값 즉 점수가 평균을 넘지 못하면 해당 If 문을 빠져나옴

만약 각 튜플의 두번째 값 즉 점수가 평균을 넘으면 해당 튜플의 첫번쨰 값 즉 학생이름을 출력함

 

이때 print는 줄바꿈이 기본이므로 end=' '을 통해 줄바꿈하지 않음

 

' > python' 카테고리의 다른 글

라이브러리 사용방법  (0) 2021.07.08
자료형이 정수인지 확인하기  (0) 2021.07.06
how to debug code  (0) 2021.06.27
반복문 연습  (0) 2021.06.26
반복의 제어  (0) 2021.06.26