일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Outlook
- 엑셀
- office
- 깃
- git
- windows
- 윈도우10
- Excel
- pyqt5
- Windows10
- Android
- 파이썬3
- VBA
- pandas
- pythongui
- 파워포인트
- html
- 문자열
- win32com
- 안드로이드
- matlab
- 파이썬
- 파이썬GUI
- 오피스
- 아웃룩
- 윈도우11
- python
- Windows11
- python3
- 비주얼베이직
Appia의 IT세상
파이썬[Python] 리스트 짝수, 홀수번째 아이템 출력 - 나눗셈, 나머지, 몫 구하기(divmod) 이용 본문
파이썬[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) (4, 0) >>>divmod(3,12) (0, 3) | 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+1, 2) if result[1] == 0: print(str(index+1)+"번째 아이템 :" +value) | cs |
result)
2번째 아이템 :item2 4번째 아이템 :item4 | cs |
이제 결과가 훨씬 부드러워 졌습니다.
오늘은 divmod를 이용한 나눗셈, 몫, 나머지를 구하는 방법에 대해서 살펴봤습니다. 이를 토대로, 리스트등의 시퀀스한 데이터에서 짝수 또는 홀수번째 데이터를 추출하는 방법도 함께 알아봤습니다. (물론 조금 보시는 분이 응용하셔야 합니다. ) 생각보다 간단하면서 나름 유용하게 사용할 수 있는 내용입니다.
혹시 궁금하시거나 문의사항이 있으시면 언제든지 댓글 및 방명록에 글남겨주시길 바랍니다. 감사합니다.
'Python > Python 응용' 카테고리의 다른 글
파이썬[Python] 파일에서 특정 단어 포함여부, 특정 단어 찾기, 특정 단어 빈도수 확인하기 (7) | 2020.05.09 |
---|---|
파이썬[Python] 파일에서 공백 포함, 공백 제외 각각의 글자 수, 단어수 세기( 글자수 계산기 만들기) (7) | 2020.05.07 |
파이썬[Python] 리스트 반복문에서 인덱스(index)와 값 같이 출력하기(enumerate) (1) | 2020.05.02 |
파이썬[Python] 2개 이상의 딕셔너리(Dictionary) 합치기 (0) | 2020.04.07 |
파이썬[Python] List를 이용한 경우의 수 추출하기 (1) | 2020.03.22 |