Appia의 IT세상

파이썬[Python] 리스트 짝수, 홀수번째 아이템 출력 - 나눗셈, 나머지, 몫 구하기(divmod) 이용 본문

Python/Python 응용

파이썬[Python] 리스트 짝수, 홀수번째 아이템 출력 - 나눗셈, 나머지, 몫 구하기(divmod) 이용

Appia 2020. 5. 4. 07:08
반응형

종종 리스트에서 특정 항목들에 대해서 출력을 하고자 할 때가 있습니다. 그 대표적인 경우가 짝수 번째, 홀수 번째 아이템을 출력하는 경우가 많습니다. 그래서 이번 포스팅에서는 리스트의 항목중에 짝수 , 홀수 아이템을 출력하는 방법에 대해서 다루고자 합니다. 여기에서는 나눗셈(/), 나머지(%), 몫을 구하는 연산자(divmod)를 활용해보도록 하겠습니다. 

 

먼저 나머지와 몫을 구하는 부분에 대해서 다루어 보고자 합니다. 상당수 많은 언어에서는 몫과 나머지를 구할 때 '/'와 '%'를 사용합니다. 물론 파이썬[Python]에서도 가능합니다. 이에 더불어 몫과 나머지를 한번에 구할 수 있는 divmod를 제공합니다. 

 

그럼 먼저 '/'와 '%'를 사용해서 몫과 나머지를 구해보도록 하겠습니다. 다음을 한번 살펴보겠습니다. 

>>>12/4
3.0
>>>12%4
0
>>>12%5
2
cs

위와 같이 '/'와 '%'를 이용해서 몫과 나머지를 구해봤습니다. 그럼 이번에는 divmod를 사용해보도록 하겠습니다. 

>>>divmod(12,3)
(40)
>>>divmod(3,12)
(03)
cs

위에서 보이는 바와 같이 divmod(A, B)는 A/B와 동일하고 결과는 (몫, 나머지) 형태로 반환됩니다. 그럼 /, %를 사용하는 것과 divmod를 사용하는 것의 성능 차이를 한번 비교 해보겠습니다. 

import timeit
 
print(timeit.timeit('divmod(n, d)''n, d = 2**74207281 - 1, 26', number=100))
 
print(timeit.timeit('n // d, n % d''n, d = 2**74207281 - 1, 26', number=100))
 
print(timeit.timeit('n // d, n % d''n, d = 2**74207281 - 1, 26', number=100))
 
print(timeit.timeit('divmod(n, d)''n, d = 2**74207281 - 1, 26', number=100))
cs

위의 결과를 해보면 다음과 같은 결과가 나옵니다. 

3.0605885
 
6.198087999999999
 
6.2788688000000015
 
3.066701700000003
cs

 

 

확실히 성능적인 측면에서 divmod가 상당히 좋은 점을 알 수 있습니다. 그럼 이제는 위에서 다루었던 부분을 바탕으로 리스트에서 홀수 및 짝수 항목을 출력해보도록 하겠습니다. 

 

먼저 간단한 리스트의 연산을 출력해보고자 합니다. 

List =["item1","item2","item3","item4","item5"]
 
for v in List :
 
    print(v)
    
#result
 
#item1
 
#item2
 
#item3
 
#item4
 
#item5
cs

위와 같은 리스트를 바탕으로 출력을 하고자 합니다. 그럼 우선 앞선 포스팅에서 인덱스 값을 출력하는 방법을 토대로, enumerate를 활용하겠습니다. 

example)

for index, value in enumerate(List):
 
    print(str(index)+"번째 아이템 :" +value)
cs

result) 

0번째 아이템 :item1
 
1번째 아이템 :item2
 
2번째 아이템 :item3
 
3번째 아이템 :item4
 
4번째 아이템 :item5
cs

그럼 여기에서 위에서 썻던 항목인 divmod를 이용해서 2로 나누고 나머지가 0인 경우만 출력을하겠습니다. 

example) 

for index, value in enumerate(List):
 
    result = divmod(index, 2)
    
    if result[1== 0:
    
        print(str(index)+"번째 아이템 :" +value)
cs

result) 

그럼 다음과 같은 결과가 나옵니다. 

번째 아이템 :item1
 
2번째 아이템 :item3
 
4번째 아이템 :item5
cs

 

그렇지만 결과가 일정 부분 오류가 있습니다. 코드상의 오류는 아니나, 실제 리스트의 인덱스 시작은 1부터 시작되기 때문에 위에서 index값에 1을 더해 줘야 합니다. 그래야지 조금 더 부드러운 결과가 나오지 않을까요 그럼 위와 같이 한번 바꿔 보겠습니다. 

example) 

for index, value in enumerate(List):
 
    result = divmod(index+12)
    
    if result[1== 0:
    
        print(str(index+1)+"번째 아이템 :" +value)
cs

result) 

2번째 아이템 :item2
 
4번째 아이템 :item4
cs

이제 결과가 훨씬 부드러워 졌습니다. 

 

오늘은 divmod를 이용한 나눗셈, 몫, 나머지를 구하는 방법에 대해서 살펴봤습니다. 이를 토대로, 리스트등의 시퀀스한 데이터에서 짝수 또는 홀수번째 데이터를 추출하는 방법도 함께 알아봤습니다. (물론 조금 보시는 분이 응용하셔야 합니다. ) 생각보다 간단하면서 나름 유용하게 사용할 수 있는 내용입니다. 

 

혹시 궁금하시거나 문의사항이 있으시면 언제든지 댓글 및 방명록에 글남겨주시길 바랍니다. 감사합니다. 

반응형
Comments