<문제>
<해결방법 - 실패>
javascript와 같이 sort()함수를 이용하고자 했다.
for문의 동작방식이 javascript와 다르다.
그러나 IndexError: list index out of range 오류가 났다. 원소 개수가 하나 적은 completion 배열은 비교 불가능하다는 것이다. participant 배열의 마지막 요소만 남을 때 비교할 수 없어서 다른 방식을 찾아야 했다.
(1차-1과 1차-2는 비슷한 방식이다. 단순메모용)
#1차-1
def solution(participant, completion):
answer = ''
participant.sort()
completion.sort()
num = 0
for p in participant:
if p == completion[num]:
num += 1
continue
else:
answer += p
return answer
#1차-2
def solution(participant, completion):
answer = ''
participant.sort()
completion.sort()
for n in range(len(participant)):
if participant[n] != completion[n]:
answer += participant[n]
return answer
javascript가 index를 넘어선 원소에 대해 undefined로 처리해주는 것과 달리 파이썬은 아예 오류난다.
javascript는 1차 방식으로 풀었다.
<다른 사람의 풀이>
zip() 함수를 이용해서 푼 경우
def solution(participant, completion):
participant.sort()
completion.sort()
for par, com in zip(participant, completion) :
if par != com :
return par
return participant[-1] #for문 다 돌고 하나만 남은 경우 solution(['a','c','c'], ['a','c'])
hash() 함수를 이용해서 푼 경우
딕셔너리의 개념을 잘
<사용된 개념>
1. sort() 함수
python으로 정렬하는 방법은 본체 정렬과 복사본 반환으로 나뉜다.
javascript의 sort()와 같이 복사본이 만들어지지 않고 본체가 정렬된다.
1.1.본체를 정렬하는 방법
오름차순 arr.sort()
내림차순 arr.sort(reverse=True)
거꾸로 뒤집기 arr.reverse()
a = [1, 10, 5, 7, 6]
a.reverse()
print(a)
#[6, 7, 5, 10, 1]
a.sort()
print(a)
#[1, 5, 6, 7, 10]
a.sort(reverse=True)
print(a)
#[10, 7, 6, 5, 1]
arr.sort()에는 key 옵션이 있다. key 옵션에 지정된 함수의 결과에 따라 정렬한다.
#원소의 길이를 key로 사용
m = '나는 파이썬을 잘하고 싶다'
m = m.split()
print(m) #['나는', '파이썬을', '잘하고', '싶다']
m.sort(key=len)
print(m) #['나는', '싶다', '잘하고', '파이썬을']
m.sort(key=len, reverse=True)
print(m) #['파이썬을', '잘하고', '나는', '싶다']
1.2.복사본을 받아 정렬하는 방법
아래를 적용한 뒤 대입해서 사용한다. reversed(arr)는 iterable한 객체를 반환하므로 확인을 위해서는 list(obj)로 한번 더 변형해야 한다.
오름차순 sorted(arr)
내림차순 sorted(arr, reverse=True)
거꾸로 뒤집기 reversed(arr)
x = [1 ,11, 2, 3]
y = reversed(x)
print(y) #<list_reverseiterator object at 0x1060c9fd0>
print(list(y))
#[3, 2, 11, 1]
y = sorted(x)
print(y)
#[1, 2, 3, 11]
y = sorted(x, reverse=True)
print(y)
#[11, 3, 2, 1]
sorted(arr)도 마찬가지로 key 옵션을 활용할 수 있다.
#객체의 인덱스 중 일부를 key로 사용
student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
s = sorted(student_tuples, key=lambda student: student[2]) # sort by age
print(s)
#[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
2. zip() 함수
python의 zip(*iterable)은 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다.
여기서 사용한 *iterable은 반복 가능(iterable)한 자료형 여러 개를 입력할 수 있다는 의미이다.
zip(*iterable)은 복사본 반환을 반환하는 reversed(arr)처럼 확인을 위해서는 list(obj)로 한번 더 변형해야 한다.
zip([1, 2, 3], [4, 5, 6]) #<zip at 0x23ff0cf5680>
list(zip([1, 2, 3], [4, 5, 6]))
#[(1, 4), (2, 5), (3, 6)]
list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))
#[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
list(zip("abc", "def"))
#[('a', 'd'), ('b', 'e'), ('c', 'f')]
#짝이 모자르면 버림해버린다.
list(zip([1, 2, 3], [4, 5, 6], [7, 8]))
#[(1, 4, 7), (2, 5, 8)]
list(zip("abc", "de"))
#[('a', 'd'), ('b', 'e')]
3. 딕셔너리 (해시)
<출처>
python 정렬
python sort()의 key 옵션
https://docs.python.org/ko/3/howto/sorting.html
다른 사람들의 풀이방법
https://ychae-leah.tistory.com/24?category=332760
https://programmers.co.kr/learn/courses/30/lessons/42576/solution_groups?language=python3
python zip() 함수
<a href="https://developer.mozilla.org/ko/docs/Learn/Server-side/Django/skeleton_website"><p>링크 걸어보기</p></a>
'Code > Python & Django' 카테고리의 다른 글
[Django] Django의 ORM : get() 과 filter() 비교 (0) | 2020.06.17 |
---|---|
[AWS] RDS DB 인스턴스 연결 오류 : ERROR 2003 (HY000): Can't connect to MySQL server on (1) | 2020.05.31 |
[Django] MySQL 과 Django 연동하기 (0) | 2020.05.31 |
AWS를 통한 Django 서비스 배포 - 1) EC2, RDS _전반부 (0) | 2020.05.29 |
Django 데이터베이스 시간대 변경 (0) | 2020.05.19 |
댓글