🐷
【Python】リストの中身を1行で並べて出力したい
言いたいこと
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関数の場合、出力はできても結合結果を保存しておくことができないためです。
Discussion