HOWTO · Python

在 Python 中重複字串 N 次

了解如何在 Python 中將字串重複固定的次數,以及如何建構達到指定字元長度的字串。

本頁內容

在 Python 中,將字串乘以整數即可重複整個字串指定次數。若要產生不超過目標字元數的字串,則可先重複足夠次數,再切片取得所需長度。這兩種作法適用於不同需求:前者保留每一份完整副本;後者的結果可能只包含最後一份副本的一部分。

在 Python 中使用 * 運算子將字串重複 N 次

知道需要幾份完整副本時,可使用 * 運算子。結果會是依序串接原始文字的新字串。以下是一個簡單範例:

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:兩份完整副本,再加上下個副本的前兩個字元。向上取整除法式會計算所需的副本數,而切片則確保結果符合指定長度。

目標長度為 0 時會回傳空字串。來源字串為空時,只能產生目標長度為 0 的結果;目標長度大於零時,輔助函式會引發 ValueError。目標長度為負數時也會引發 ValueError,避免呼叫端悄悄收到容易造成誤解的結果。如果你的應用程式需要不同的處理方式,請在使用輔助函式前調整這些檢查。