「文字列の操作って、なんとなくわかるけど、応用問題になると急に手が止まる…」そんな経験、ありませんか?😅
今回は、英語圏のエンジニアコミュニティ dev.to で話題の「Code Challenge of the Day」から、単語の順番を逆にする関数 reverse_words() を一緒に解いていきましょう!
難易度は Easy(初級) です。Pythonの基本的な文字列メソッドを使いこなす絶好の練習になりますよ 🐍
📝 問題のおさらい

問題はシンプルです。
- スペース区切りの単語が入った文字列
sを受け取る - 単語の順番を逆にして返す
- 余分なスペースは削除(collapse)する
たとえばこんな感じです。
reverse_words("Hello World") # → "World Hello"
reverse_words(" Python is fun ") # → "fun is Python"
余分なスペースを無視するのがポイントですね。
🔑 解法のポイントを整理しよう
イメージとしては、こんな3ステップです。
- split() で単語に分割する(余分なスペースも自動で無視してくれる!)
- [::-1] またはreversed()でリストを逆順にする
- join() で空白つなぎに戻す
Pythonの split() は、引数なしで呼ぶと連続するスペースを自動的にまとめてくれます。これ、知っておくと一気に解決できるポイントですよ 💡
✅ 解答コード
実際に書いてみましょう!
def reverse_words(s):
# split()は引数なしで余分なスペースをまとめて分割してくれる
words = s.split()
# リストを逆順にしてjoinでつなぐ
return " ".join(words[::-1])
# --- 動作確認 ---
print(reverse_words("Hello World")) # → "World Hello"
print(reverse_words(" Python is fun ")) # → "fun is Python"
print(reverse_words("one")) # → "one"
print(reverse_words("")) # → ""
ポイントをまとめるとこんな感じです👇
split()(引数なし)→ 余分なスペースを気にせず単語リストに変換[::-1]→ リストを逆順にするPythonらしいスライス記法" ".join(...)→ 単語リストをスペース区切りの文字列に戻す
これ、実行せずに空文字列 "" を渡したときの動作を正確に答えられますか?🤔 split() は空文字に対して空リスト [] を返し、join も空文字列を返すので安全に動きます。
💡 別解:reversed()を使うパターン
def reverse_words(s):
# reversed()を使うパターン(どちらでもOK)
return " ".join(reversed(s.split()))
どちらも1行で書けるのがPythonの気持ちいいところですよね 😊
まとめ
今回は split() + [::-1] + join() という組み合わせで、単語の順番を逆にする関数をスッキリ実装できました。
文字列操作はPythonの基本中の基本。こういった小さなチャレンジをコツコツ積み重ねると、着実に力がつきますよ 💪 ぜひ手元で動かして試してみてください!





