🐷

【Python】リストの中身を1行で並べて出力したい

2024/04/20に公開

言いたいこと

Pythonを用いてリストの中身を1行で並べて出力するときは、*を使う!

arr1 = ["りんご", "ごりら", "らっぱ"]
print(*arr)  # りんご ごりら らっぱ
print(*arr, sep="に")  # りんごにごりらにらっぱ

私が以前まで使っていた方法

Paizaラーニングなどでプログラミング問題を解いているとき、スペース区切りで回答を列挙することを求められる場合があります。
私は本記事の方法を知るまで、文字列のjoinメソッドを使っていました。

foo.py
" ".join(arr)

しかしこれは手続き的で、読みづらいというデメリットがあります。
またJavaScriptで同じことをする場合、" "arrがひっくり返った記述をする必要があり、こんがらがって頻繁に調べ直していました。

bar.js
arr.join(" ")

可変長のアンパックの基本

Pythonでは、リストの前に*をつけることで可変長のアンパックを行うことができます。

アンパックについては別の方が詳しくまとめられています。
【アンパック】要素をスマートに取り出す|Python 中級者への道

print関数は可変長引数を受け取ることができるので、*によって引数の展開が行われ、スペース区切りでの出力がされます。
私の中では以下のような変換が行われていると解釈しています。

arr = ["Hello", "Python"]

print(*arr)
# ↓
print("Hello", "Python")

可変長のアンパックの応用

好きな区切り文字が使える

print関数は区切り文字を指定することができます。キーワード引数sepを用います。

arr = ["ひ", "み", "つ"]
print(*arr, sep="・")  # ひ・み・つ

リスト以外もアンパックできる

イテラブルであればアンパックできます(たぶん)(きちんと調べてない)。

r = range(5)
print(*r)  # 0 1 2 3 4

Q. joinはいらない子なのか?

A. そんなことはない

リストの要素を結合して変数に格納したい場合にjoinは有効です。
print関数の場合、出力はできても結合結果を保存しておくことができないためです。

GitHubで編集を提案

Discussion