반응형
그동안 다양한 itertools 기능을 C++로 옮기는 방법을 살펴봤습니다. 파이썬 itertools는 시퀀스를 다루는 멋진 아이디어를 끊임없이 제공하는데, 이번에는 chain.from_iterable와 batched 두 가지를 살펴보려 합니다. 특히 batched는 파이썬 3.11에서 새롭게 추가된 함수로, 이 역시 매력적인 기능입니다. 먼저 파이썬에서 이 두 함수를 간단히 소개해볼게요.from itertools import chain, batched# chain.from_iterable(iterable_of_iterables)는 이중 iterable을 평탄화# 예: [[1,2],[3,4,5],[6]] -> 1,2,3,4,5,6list_of_lists = [[1,2],[3,4,5],[6]]for x i..
우리가 지금까지 다룬 파이썬 itertools 함수들 외에도, 파이썬에서 제공하는 편리한 반복 툴이 여전히 많이 남아 있습니다. 이번 글에서는 그중에서도 자주 쓰이는 세 가지를 골라봤습니다. 먼저, 파이썬으로 몇 가지 예제를 보여드릴게요:from itertools import count, zip_longest, pairwise# count는 start부터 step 간격으로 무한히 증가하는 숫자를 생성for i in count(10, 2): if i > 20: break print(i, end=' ') # 출력: 10 12 14 16 18 20# zip_longest는 가장 긴 이터러블이 끝날 때까지 묶음을 만들고, 부족한 곳은 fillvalue로 채워줌list_a = [1, 2,..
안녕하세요! 지난 글들에서 우리는 파이썬 itertools의 다양한 기능들을 C++20/23 문법과 Ranges 라이브러리, 그리고 다양한 기법을 활용해 “파이썬스러운” 스타일로 구현하는 시도를 해왔습니다. 이제 꽤 많은 기능을 다뤘죠. 이번에는 아직 소개하지 않았던 네 가지를 살펴보겠습니다:compress(data, selectors): data와 selectors를 나란히 순회하면서 selectors가 참일 때만 data의 원소를 내보냅니다.filterfalse(predicate, iterable): filter의 반대 버전으로, predicate가 거짓일 때만 원소를 내보냅니다.starmap(function, iterable_of_iterables): 각 원소가 튜플(혹은 리스트)인 이터러블을 받아..
여러분, 지난 글들에서는 파이썬 itertools의 꽤 많은 기능을 C++에서 “파이썬스럽게” 흉내 내보았습니다. 이제 남은 인기 있는 기능 중 몇 가지를 더 살펴보고, 이 시리즈를 어느 정도 마무리할 때가 된 듯하네요. 이번에는 cycle, repeat, islice, tee 네 가지를 다뤄보겠습니다.cycle(iterable): 주어진 이터러블을 무한히 반복시키는 제너레이터입니다. 파이썬에서는 cycle([1,2,3]) 하면 1,2,3,1,2,3,1,2,3... 끝없이 이어집니다.repeat(elem, n=None): 특정 원소를 n번(또는 무한히) 반복하는 제너레이터입니다.islice(iterable, start, stop, step): 이터러블에서 특정 범위만 슬라이싱해주는 함수입니다. 파이썬의 ..
안녕하세요! 지난 글들에서 우리는 파이썬 itertools의 다양한 기능—range, enumerate, zip, map, filter, chain, takewhile, dropwhile, accumulate, groupby—를 C++에서도 나름 “파이썬스럽게” 구현하거나 표현하는 방법을 두루 살펴봤습니다. 이번에는 itertools의 대표적인 조합론적(iteration over combinations) 함수들인 product, permutations, combinations를 살펴보려고 합니다. 이 함수들은 파이썬에서 꽤 자주 쓰입니다. 예를 들어 product([1,2],[3,4])는 (1,3), (1,4), (2,3), (2,4)를 만들어내고, permutations([1,2,3], 2)는 (1,2..
여러분, 지난 글들에서 우리는 C++에서 파이썬의 range, enumerate, zip, map, filter, chain, takewhile, dropwhile 등을 흉내 내는 방법을 쭉 살펴봤죠. 이제는 또 다른 파이썬 itertools의 매력적인 부분으로 넘어가려고 합니다. 바로 accumulate(파이썬 itertools의 accumulate), 그리고 groupby입니다. accumulate는 요소들을 순회하면서 누적 합이나, 누적 연산 결과를 차곡차곡 모아줍니다. 파이썬에서는 itertools.accumulate([1,2,3,4], operator.mul) 이렇게 사용해 곱셈 누적을, operator.add를 사용해 합 누적을 손쉽게 할 수 있습니다. C++에도 std::accumulate라..
앞선 글들에서 우리는 파이썬의 range, enumerate, zip, map, filter와 같은 편리한 함수형 API를 C++20/23 문법과 Ranges 라이브러리 등을 통해 “파이썬스럽게” 구현하는 방법을 살펴보았습니다. 이번 글에서는 한 단계 더 나아가, 파이썬의 itertools 라이브러리가 제공하는 몇 가지 대표적인 툴을 C++ 스타일로 흉내 내보려 합니다. itertools는 파이썬에서 반복 가능한(iterable) 시퀀스를 다루는 데 매우 유용한 툴셋을 제공합니다. 그중에서도 chain, takewhile, dropwhile는 다양한 컨테이너나 이터러블을 직관적이고 유연하게 다룰 수 있게 해줍니다. 글의 구성은 다음과 같습니다:일반적인 C++ 구현 (Before): 파이썬 chain, t..
앞선 글들에서 우리는 파이썬의 range, enumerate, zip와 유사한 C++ 구현 방식을 살펴보았습니다. 파이썬의 직관적 문법을 C++20/23의 언어와 라이브러리 기능들을 통해 비교적 쉽게 재현할 수 있음을 확인했죠. 이번 글에서는 파이썬에서 자주 사용하는 함수형 스타일의 API인 map과 filter를 C++에서 어떻게 “파이썬스럽게” 구현할 수 있는지 다뤄보겠습니다. 파이썬의 map(function, iterable), filter(predicate, iterable)를 C++20/23에서 비슷한 느낌으로 쓸 수 있다면, 복잡한 로직을 더 간결하고 깔끔하게 표현할 수 있습니다. 글의 구성은 다음과 같습니다:일반적인 C++ 구현 (Before): 람다, std::transform, std::..
순자산(Net Worth)란?순자산(Net Worth)은 개인 또는 기업이 보유한 모든 자산(Assets)의 총합에서 모든 부채(Liabilities)를 차감한 뒤 남는 금액을 의미합니다. 쉽게 말해 “내가 가진 것(자산)에서 남에게 갚아야 할 것(부채)을 뺀 순수한 재산”이라고 할 수 있습니다. 순자산은 개인의 재무적 건강 상태를 파악하는 핵심 지표로 활용되며, 기업의 경우 주주지분(Shareholders’ Equity)과 유사한 개념으로 쓰입니다.공식:순자산=총자산−총부채순자산 = 총자산 - 총부채총 자산(Assets): 현금, 은행 예금, 주식, 채권, 부동산, 사업체 지분, 예술품, 골동품, 귀금속 등 경제적 가치가 있는 모든 재산.총부채(Liabilities): 주택 담보 대출금, 전세금 반환 ..
파일 검증 작업을 하다보면, 다운로드 받은 파일의 무결성(integrity)을 확인하기 위해 해시(hash) 값을 비교하는 경우가 많습니다. 특히 SHA-256 해시는 많은 소프트웨어 배포 사이트에서 표준적으로 제공하고 있는 대표적인 해시 알고리즘 중 하나입니다. 또한 단순히 파일뿐만 아니라, 특정 문자열에 대한 SHA-256 해시값을 얻고자 할 때도 있습니다. 이 글에서는 리눅스, 맥OS, 윈도우 환경에서 SHA-256 해시를 커맨드라인 도구로 간편하게 계산하는 방법을 설명하겠습니다.1. SHA-256 해시란?SHA-256은 SHA-2 알고리즘 계열의 해시 함수 중 하나로, 256비트 길이의 해시값을 생성합니다. 이 값은 일반적으로 16진수(HEX) 형태로 출력되며, 파일이나 문자열의 "지문"으로 사용..