Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで数値を3桁区切り(カンマ区切り)の文字列に変換するプログラム

数値 n が与えられたとき、その数値を3桁ごとにカンマ(,)で区切った文字列形式に変換して返すことを考えます。

例えば、入力が n = 512462687 の場合、出力は 512,462,687 となります。これは金額や大きな数値を見やすく表示したい場面でよく使われる処理です。

解決の手順

この問題は、以下のステップで解決できます。

  • まず n を文字列に変換し、res とします
  • res を反転させます
  • 結果を格納するための空文字列 ans を用意します
  • i を 0 から res の長さ - 1 まで繰り返します
    • i を 3 で割った余りが 0 かつ i が 0 でない場合、ans にカンマ「,」を連結します
    • ansres[i] を連結します
  • 最後に ans を再び反転させて返します

文字列を一度反転させるのは、桁の下から数えて3桁ごとにカンマを挿入するためです。末尾から処理することで、正しい位置に区切り文字を配置できます。

Pythonでの実装例

理解を深めるために、以下の実装例を見てみましょう。

def solve(n):
    res = str(n)
    res = res[::-1]

    ans = ""
    for i in range(len(res)):
        if i % 3 == 0 and i != 0:
            ans += ','
        ans += res[i]

    ans = ans[::-1]

    return ans

n = 512462687
print(solve(n))

入力

512462687

出力

512,462,687

より簡単な方法:format関数を使う

実は Python では、組み込みの書式指定機能を使えばこの処理を1行で実現できます。

n = 512462687
print(f"{n:}")          # f文字列の場合
print(format(n, ','))     # format関数の場合
print('{:}'.format(n))   # str.formatメソッドの場合

いずれの出力も 512,462,687 となります。実務ではこちらの方法がシンプルで推奨されますが、アルゴリズムの学習目的としては、手動でカンマを挿入する上記の実装もロジック理解の良い練習になります。

  1. Pythonでバイナリリスト内の合計がkとなるサブリストの個数を求めるプログラム

    問題の概要0と1のみで構成されるバイナリリストが与えられたとします。さらに別の入力として整数 k が与えられ、要素の合計がちょうど k に一致するサブリスト(連続する部分配列)の個数を求める必要があります。例えば、入力が nums = [1, 0, 0, 1, 1, 1, 0, 1]、k = 3 の場合、出力は 8 になります。これは、条件を満たすサブリストとして [1,0,0,1,1]、[0,0,1,1,1]、[0,0,1,1,1,0]、[0,1,1,1]、[0,1,1,1,0]、[1,1,1]、[1,1,1,0]、[1,1,0,1] の8つが存在するためです。解決のためのアプローチこの問題

  2. Pythonでn個のノードから構成できる二分探索木(BST)の数を求める方法

    問題の概要互いに異なるn個のノードが与えられたとき、それらを二分探索木(BST:Binary Search Tree)として配置する方法が何通りあるかを求めることを考えます。二分探索木には「左部分木には常に親より小さい値が、右部分木には常に親より大きい値が格納される」という重要な性質があります。この問題を解くには、カタラン数(Catalan Number)を利用します。カタラン数 C(n) は、n個の異なるキーから構成できる二分探索木の総数を正確に表すことが知られています。計算式は次のとおりです。$$C(n)=\frac{(2n)!}{(n+1)!\times n!}$$例えば、入力が n =