Python3 ~split関数について~
競技プログラミング(あるいはそれ以外でも)で使わない問題はないのではないと思うほど使用頻度の高いsplit()ですが、それを高度な使用をしようとしてできる人はあまり多くないのではないでしょうか。今回は、そんな愛されながらも謎に包まれたsplit()について解説します。
よくある使い方
たとえば、
AtCoder Beginner Contest030_AA - 勝率計算
問題文
野球のAtCoderリーグのシーズンが終了しました。チーム高橋は A試合中 B 回勝ち、チーム青木は C 試合中 D回勝ちました。AtCoderリーグでは勝率の高い順に高い順位が与えられます。チーム高橋とチーム青木のどちらが勝率で勝っているか答えるプログラムを作成してください。
入力
入力は以下の形式で標準入力から与えられる。
A B C D
1行目には、4 つの整数 A,B,C,D(1≦A,B,C,D≦100)が与えられる。
B ≦ A かつ D ≦ C を満たすことが保証される。出力
チーム高橋の勝率がより高いときは TAKAHASHI、チーム青木の勝率がより高いときは AOKI、両チームの勝率が等しいときは DRAW と 1 行に出力せよ。出力の末尾にも改行をいれること。
などでは、入力にsplit()をつかうべきですよね。A, B, C, Dそれぞれがn桁だと明示されていれば入力そのものを文字列だと受け取り、インデックスの指定で計算してやることもできますが、今回は1から3桁まで開きがあるので(できないとは言いませんが)やるべきではありません。
ここで役に立つのがsplit()です。
引数(split(*)の*の部分)を指定せずに使ってやると、スペース区切りでリストに入れてくれます。
n = input().split() #114 514 810 931 print(n) # ['114', '514', '810', '931']
区切り文字を指定して区切る
引数の中に文字(列)を入れてやると、それを区切りとしてリストを作ってくれます。
n = input().split("アッー") # 114アッー514アッー810アッー931 print(n) # ['114', '514', '810', '931']
arrgh = "アッー" n = input().split(arrgh) # 114アッー514アッー810アッー931 print(n) # ['114', '514', '810', '931']
区切り回数を指定する
第二引数に数を指定してやると回数指定ができます。
はじめの一回だけ区切りたい...あるいは、最後の一回だけ区切りたい、と言った時に使えます。
n = input().split("アッー", 1) # 114アッー514アッー810アッー931 print(n) # ['114', '514アッー810アッー931']
あるいは、split()をrsplit()に変えてやることで、反対から区切ってくれます。
n = input().rsplit("アッー", 1) # 114アッー514アッー810アッー931 print(n) # ['114アッー514アッー810', '931']
すでにある文字列・リストを区切ってリストにする
すでに存在している文字列に後置で実行してやることによって、リストを作成することもできます。
n = "114 514 810 931" n = n.split() print(n) # ['114', '514', '810', '931']
リストにsplit()は使えません。ので、一度文字列に直してやります。
n = ['114 514 810 931', '893 889464'] n = ' '.join(n).split() print(n) # ['114', '514', '810', '931', '893', '889464'] """※str(n)では ['114 514 810 931', '893 889464'] というように中括弧やアポストフィーも出力されるので ' '.join(n)とし、nの要素間に' '(スペース)を挟んで出力する 114 514 810 931 893 889464 とする。 """
とできます。
簡単な部分のみを解説しましたが、非常に便利な関数なので、ぜひ使ってみてください。
よいPythonLifeを!