雑記帳(@watagasi_)

【言語処理100本ノック】03. 円周率【python】

言語処理100本ノックです。

www.cl.ecei.tohoku.ac.jp

 

なんで03からかというと、02までテキトーにやりすぎててpython的な書き方ちゃんと出来てないのでは?って具合で記事にするのが恥ずかしかったからです。

 

まあ100本ノックしながらpythonの勉強しているので、結局はまだ恥ずかしい感じだとは思いますが、とりあえず書いていきましょう。

 

 

お題は以下です。

 

"Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ.

 

与えられた文章をまず単語に分解してリストにつっこみ、その単語それぞれの長さを取得したリストを作ってしまえば良さそうですね。

 

ではいきましょう。

 

import re

test_str = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
result = re.split("\W+", test_str)

re.split("\W+",文字列)って書いとけば、単語に分解してくれるんだって。便利ですね。

 

\Wが何なのかは「正規表現 W」とかで調べれば出てくると思います。

 

resultの中身は今こんな感じ。

>>>['Now', 'I', 'need', 'a', 'drink', 'alcoholic', 'of', 'course', 'after', 'the', 'heavy', 'lectures', 'involving', 'quantum', 'mechanics', '']

 いい感じですね。ただ最後に空の文字列が来るのは邪魔なのでresult.popで排除しておきましょう。

 

import re

test_str = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
result = re.split("\W+", test_str)
result.pop()

list1 = []
cr = len(result)
for i in range(cr):
list1.append(len(result[i]))

 次は単語それぞれの文字数を格納するリスト、list1を作ってそこに文字数をぶち込みます。

 

len(result[i])で各単語の文字数を取得できるので、それをappendでぶち込んでおけばいいですね。

 

何回ぶち込んだら良いかはresultの要素数と一致するんで、先にlen(result)で要素数を取得してcrってのに入れて、forで回していきましょう。

 

この時list1の中身はこんな感じ。

>>>[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]

 はい、いい感じですね。

 

もっと簡単にやる方法があるかもしれませんが、今はこんなところで。

 

あとキレイにコード書きたいですね。いろいろ勉強していきましょう。