読者です 読者をやめる 読者になる 読者になる

04 : 言語処理100本ノックでPythonのお勉強

第一章 : 04のお題 元素記号

"Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."という文を単語に分解し,1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,それ以外の単語は先頭に2文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.

プログラムはこんな感じです。

first_w_list = [1, 5, 6, 7, 8, 9, 15, 16, 19]
target = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
results = {}

words = target.split(" ")

for (num, word) in enumerate(words, 1):
    if num in first_w_list:
        results[word[0:1]] = num
    else:
        results[word[0:2]] = num

print(results)

最初に先頭の1文字だけ取り出す単語の番号のリスト、文全体の文字列、結果を入れる辞書を作成します。

次に文全体を文字列から単語のリストに変換します。

そして、enumerate()関数を使って単語のリストを回し、numがfirst_w_listに入ってる場合は、単語の1文字目をスライスして辞書のキーに入れ、辞書の値にその番号を入れます。入っていない場合は単語の2文字目までをスライスし、辞書のキーに入れ、辞書の値にその番号を入れます。

enumerate()関数を使うと、リストの値だけでなく、インデックス番号も取得することができます。for(num, word) in enumerate(words, 1)と書くと、wordsリストに入っている要素のインデックスをnumに返し、値をwordに返すことができます。enumerate()関数の第2引数(今回の場合は1)は最初のインデックス番号をいくつにするか指定するために使います。