HOWTO · Python

Python で文字列を N 回繰り返す

Python で文字列を固定回数繰り返す方法と、指定した文字数までの長さの文字列を構築する方法を学びます。

このページの内容

Pythonでは、文字列に整数を掛けると、文字列全体を指定した回数だけ繰り返せます。目標の文字数まで文字列を作るには、十分な回数だけ繰り返してから結果をスライスします。前者では各コピーがそのまま保たれますが、後者では最後のコピーが途中で切れることがあります。

Pythonの*演算子で文字列を指定した回数だけ繰り返す

必要なコピー数が決まっている場合は、*演算子を使います。元の文字列を順につなげた新しい文字列が作られます。簡単な例を見てみましょう。

print("ha" * 3)
hahaha

出力はhahahaです。0を掛けると空文字列になります。負の回数を指定した場合も空文字列になります。アプリケーションで負の値を拒否する必要があるなら、掛け算の前に回数を検証してください。回数には整数を指定します。

コピーの間に区切り文字を入れるには、繰り返したシーケンスに対してjoin()を呼び出します。たとえば、", ".join(["ha"] * 3)は各コピーの間にカンマと空白を入れ、ha, ha, haを作ります。区切り文字は項目の間に入ります。*演算子だけを使うと、コピーはそのまま隣り合います。通常の固定回数の繰り返しには、文字列の掛け算が最も分かりやすい方法です。

Pythonで文字列を指定した長さまで繰り返す

目標の長さまで繰り返す場合、最後のコピーは途中までになることがあります。元の文字列を必要な回数だけ繰り返し、その結果を指定した文字数でスライスします。このヘルパー関数は、負の目標長を拒否します。また、空の元文字列から正の長さの文字列は作れないことをエラーで示します。

def repeat_to_length(text, target_length):
    if target_length < 0:
        raise ValueError("target_length must be nonnegative")
    if not text and target_length > 0:
        raise ValueError("text must not be empty for a positive target length")
    if target_length == 0:
        return ""

    copies = (target_length + len(text) - 1) // len(text)
    return (text * copies)[:target_length]

result = repeat_to_length("abc", 8)
print(result)
abcabcab

示された入力に対する出力はabcabcabです。これは2つの完全なコピーに続けて、次のコピーの先頭2文字を加えたものです。切り上げ除算の式で必要なコピー数を計算し、スライスで指定された長さに正確に合わせます。

目標の長さが0なら、空文字列が返されます。元文字列が空の場合に作れるのは、目標の長さが0のときだけです。正の目標長を指定すると、この関数はValueErrorを発生させます。誤解を招く結果が黙って返されないよう、負の目標長を指定した場合もValueErrorを発生させます。アプリケーションで別の扱いにしたい場合は、この関数を使う前に該当するチェックを調整してください。