-
C++樹林
【C++】vector等から重複した要素を削除する std::unique の使い方
はじめに C++で、vector などのコンテナから、重複している要素を全て取り除き、ユニークな(一意な)要素だけの状態にしたい、という場面は頻繁にあります。 この目的のために、標準ライブラリ <algorithm> には std::unique という関数が用意され... -
Python樹林
Python文字列の整形:rjust(), ljust(), center()でテキストを揃える
この記事では、Pythonの文字列をコンソールやテキストファイルに出力する際に、見た目を整えるために役立つrjust()、ljust()、center()メソッドについて解説します。 rjust()メソッドとljust()メソッド rjust()とljust()は、指定した全体の幅の中で、文字... -
Python樹林
Python文字列のjoin()とsplit()メソッド:リストと文字列を自在に変換
この記事では、Pythonの文字列とリストを相互に変換するための基本的なメソッドである、**join()とsplit()**について解説します。 join()メソッド:リストを文字列に結合する join()メソッドは、文字列のリストの各要素を、指定した**区切り文字(separato... -
Python樹林
Python文字列のstartswith()とendswith()メソッドによる接頭辞・接尾辞の判定
この記事では、Pythonの文字列が特定の部分文字列で始まるか、または終わるかを判定する**startswith()とendswith()**メソッドについて解説します。 startswith()メソッド startswith()メソッドは、文字列が指定された**接頭辞(prefix)**で始まるかどう... -
Python樹林
Python文字列のupper(), lower(), isupper(), islower()メソッド
この記事では、Pythonの文字列における大文字と小文字を操作するための基本的なメソッド、upper()、lower()、isupper()、islower()について解説します。 大文字・小文字に変換する:upper()とlower() upper()とlower()メソッドは、文字列のアルファベット... -
Python樹林
Python文字列:inとnot in演算子による部分文字列の検索
この記事では、Pythonの文字列に特定の部分文字列が含まれているかどうかを判定するinおよびnot in演算子について解説します。 in演算子 in演算子は、ある文字列が別の文字列内に部分文字列として含まれているかを評価します。含まれている場合はTrueを、... -
Python樹林
Python文字列の基本:インデックスとスライスによる部分文字列の抽出
この記事では、Pythonの文字列から特定の部分を抽出するための基本的な手法である、インデックスとスライスについて解説します。 インデックスによる文字へのアクセス 文字列は、文字が順番に並んだシーケンスデータです。そのため、各文字にはインデック... -
Python樹林
Pythonの文字列操作:クォート、エスケープ文字、複数行文字列の基本
Pythonにおいて、文字列は最も基本的なデータ型の一つです。テキストデータを扱う上で、文字列をどのように定義し、特殊な文字をどう表現するかを理解することは非常に重要です。 この記事では、Pythonで文字列を定義するための様々な方法(クォートの使い... -
Python樹林
Python辞書でゲームの持ち物リストを管理しよう
Pythonの辞書は、キーと値のペアでデータを管理するのに非常に強力です。その実用的な応用例として、ファンタジーゲームのプレイヤーが持つアイテムとその数を管理する「持ち物リスト(インベントリ)」の作成があります。 この記事では、辞書を使ってゲー... -
C++樹林
【C++】all_of, any_of, none_of | コンテナの要素が条件を満たすか判定する方法
はじめに C++で、コンテナ(vectorなど)の全要素をチェックして、「全ての要素が正の数か?」「少なくとも一つ偶数が含まれているか?」「負の数は一つも含まれていないか?」といった条件を判定したい場面はよくあります。 forループとif文でこれらのロ... -
C++樹林
【C++】min_element, max_elementでコンテナの最小値・最大値を取得する方法
はじめに C++で、vector などのコンテナに格納された要素の中から、最小値や最大値を探し出したい、という場面は非常に多くあります。自前でループを書いて探すこともできますが、C++の標準ライブラリ <algorithm> には、このための専用関数が用意さ... -
C++樹林
【C++】std::accumulate でコンテナの合計値などを計算する方法
はじめに C++で、vector などのコンテナに格納された全要素の合計値を求めたい場合、forループを使って一つずつ足し合わせていくのが基本的な方法です。しかし、このような典型的な集計処理のために、標準ライブラリ <numeric> には、より簡潔で意図... -
C++樹林
【C++】std::set_union 等 | 2つのソート済みコンテナで集合演算を行う方法
はじめに 数学で学ぶ「集合」の考え方(和集合、積集合、差集合など)は、プログラミングにおいても、2つのデータセットを比較・合成する際に非常に役立ちます。 C++の標準ライブラリ <algorithm> は、これらの集合演算を効率的に行うための、以下の... -
C++樹林
【C++】std::next_permutation ですべての順列を生成する方法
はじめに プログラミングでは、{A, B, C} という要素の集まりから、{A, C, B}, {B, A, C}, {B, C, A} といった、考えられる全ての並び順(順列)をリストアップしたい場面があります。 C++の標準ライブラリ <algorithm> には、この順列生成を簡単に... -
C++樹林
【C++】vectorやstringのデータへ直接アクセスするポインタを取得する方法 (.data, .c_str)
はじめに C++のstd::vectorやstd::stringは、内部的に連続したメモリ領域(配列)を使ってデータを管理しています。通常、これらのコンテナの要素には .at() や [] 演算子でアクセスしますが、時には、C言語スタイルの古い関数(printf や memcpy など)と... -
C++樹林
【C++】vectorのメモリを事前確保するreserve()の使い方(パフォーマンス改善)
はじめに C++の std::vector は、要素を追加 (push_back) していくと、内部のメモリ領域(キャパシティ)が足りなくなった時点で、より大きな新しいメモリ領域を確保し、そこに全要素をコピーするという「メモリの再確保」を自動で行います。 この再確保は... -
C++樹林
【C++】vectorの余分なメモリを解放する shrink_to_fit() の使い方
はじめに C++の std::vector は、要素が追加される際に、効率化のために実際の要素数よりも少し多めにメモリを確保します。これにより、push_back のたびにメモリ確保が走るのを防ぎ、パフォーマンスを向上させています。 vectorが現在保持している要素の... -
Python樹林
Pythonの入れ子辞書:複雑なデータを構造化する方法
Pythonの辞書はキーと値のペアを格納しますが、その「値」としてさらに別の辞書を格納することもできます。このようにデータ構造の中に同じ種類のデータ構造が入っている形を**入れ子(ネスト)**と呼びます。 入れ子辞書を使うと、より複雑で階層的なデー... -
Python樹林
Pythonで三目並べを完成させよう:勝利判定と入力チェック機能付き
Pythonの基礎を学んだら、その知識を組み合わせて実際に動くものを作ってみたくなりますよね。**三目並べ(Tic-Tac-Toe)**は、辞書、関数、ループといった基本的な要素をすべて活用するのに最適なプロジェクトです。 この記事では、シンプルな三目並べゲ... -
Python樹林
Pythonのpprintモジュールで辞書やリストを綺麗に表示する方法
Pythonでリストや辞書、特にネストされた(入れ子構造の)複雑なデータ構造を扱う際、print()関数でその内容を確認しようとすると、すべてのデータが一行で表示されてしまい、非常に読みにくいことがあります。 このようなデータを、人間が読みやすいよう... -
Python樹林
Python辞書のsetdefault()メソッドでキーの初期値を設定する方法
Pythonで辞書を扱う際、「もしキーが存在しなかったら、デフォルト値(初期値)を設定する」という処理は非常によくあるパターンです。通常、これはif文を使って書くことができます。 # 設定を管理する辞書 config = {"user": "admin", "level": 5} # "the... -
Python樹林
Python辞書のget()メソッド:KeyErrorを回避して安全に値を取得する方法
Pythonで辞書を扱う際、存在しないキーを指定して値を取り出そうとするとKeyErrorが発生し、プログラムが停止してしまいます。これを防ぐためのエレガントな方法が、辞書の**get()メソッド**です。 この記事では、get()メソッドの基本的な使い方と、角括弧... -
Python樹林
Python辞書:キーや値が存在するかを安全にチェックする方法
Pythonで辞書を扱う際、存在しないキーにアクセスしようとしてKeyErrorというエラーに遭遇するのは、初心者がよく経験することです。このようなエラーを防ぐためには、処理を行う前にキーや値が辞書に存在するかどうかを事前に確認することが重要です。 こ... -
Python樹林
Python辞書のkeys(), values(), items()メソッドの使い方
Pythonの辞書はキーと値のペアでデータを格納しますが、これらのデータをループ処理で一つずつ取り出したい場面は非常に多くあります。そのために、辞書には**keys()、values()、items()**という3つの便利なメソッドが用意されています。 この記事では、こ... -
Python樹林
Pythonの辞書入門:リストとの違いと基本的な使い方
Pythonには、複数のデータをまとめて管理するための強力なデータ型としてリストがありますが、それとは異なる方法でデータを整理する**辞書(dictionary)**というデータ型も存在します。 リストが**順番(インデックス)でデータを管理するのに対し、辞書... -
C++樹林
【C++】views::iota で連続した数値(数列)を生成する方法
はじめに プログラミングでは、「1から10までの数」や「0から始まる10個の数」といった、連続した数値のシーケンスを使ってループ処理を行いたい場面が頻繁にあります。従来は、for (int i = 1; i <= 10; i++) のように、forループの初期化式・条件式・... -
C++樹林
【C++】std::span の使い方 | 配列やvectorの一部を安全に参照する方法
はじめに C++で、関数に配列の一部を渡したい場合、従来はポインタとサイズをペアで渡す必要があり、バグが発生しやすいという問題がありました。 C++20で導入された std::span は、この問題をエレガントに解決します。spanは、連続したメモリ領域への「ビ... -
C++樹林
【C++】Rangesライブラリ入門 | take, drop, filterで要素を抽出する方法
はじめに C++で、コンテナ(vectorなど)から「最初の3要素だけ」や「偶数の要素だけ」を取り出したい場合、従来は手動でforループとif文を組み合わせる必要がありました。 C++20で導入されたRanges(レンジ)ライブラリは、このようなデータシーケンスの... -
C++樹林
【C++】自作クラス/構造体を std::map や std::set のキーにする方法
はじめに C++のstd::setやstd::mapは、キーの大小関係に基づいて、内部のデータを自動的にソートします。intやstringのような基本型は、a < b のように、コンパイラが比較方法を知っているため、そのままキーとして使えます。 しかし、自作したProduct... -
C++樹林
【C++】mapやsetを効率的に併合する.merge()の使い方
はじめに C++で、二つのmapやsetといった連想コンテナを一つにまとめたい場合、従来は片方のコンテナの全要素をループで取り出し、もう片方に一つずつinsertする必要がありました。この方法では、要素のコピーや、場合によってはメモリの再確保が発生し、...