MikiTech

文系新卒エンジニアの学習記録

【Python】言語処理100本ノック2020 04. 元素記号

問題文

nlp100.github.io

“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文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.

コード

text = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
text = text.replace(",","").replace(".","").split()


def wordTake(num , word):
    if num in [1,5,6,7,8,9,15,16,19]:
        return (word[0],num)
    else:
        return(word[:2],num)

#enumerate関数の使用
ans = [wordTake(num,word) for num , word in enumerate(text,1)]

print(dict(ans))

'''
【出力結果】
{'H': 1, 'He': 2, 'Li': 3, 'Be': 4, 'B': 5, 'C': 6, 'N': 7, 'O': 8, 'F': 9, 'Ne': 10, 'Na': 11, 'Mi': 12, 'Al': 13, 'Si': 14, 'P': 15, 'S': 16, 'Cl': 17, 'Ar': 18, 'K': 19, 'Ca': 20}
'''

ここではenumerate関数を調べ、利用しました。
enumerate関数はPythonの組み込み関数で、ライブラリインポートなしで利用できるそうです。 note.nkmk.me

文章のカンマとピリオドを削除し、文章を区切りリストにします。 それに、enumerateを使うと以下のような出力結果に。

text = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
text = text.replace(",","").replace(".","").split()

for num , word in enumerate(text,1)

'''
【出力結果】
1 Hi
2 He
3 Lied
4 Because
5 Boron
6 Could
7 Not
8 Oxidize
'''

このナンバリングされた数字と取り出した文字をwordTakeメソッドに入れます。
数字が[1,5,6,7,8,9,15,16,19]の時は文字をそのまま返し、
それ以外の単語はスライスで2文字目までを返しています。

そのままansを出力すると、

#[('H', 1), ('He', 2), ('Li', 3), ('Be', 4), ('B', 5), ('C', 6), ('N', 7), ('O', 8), ('F', 9), ('Ne', 10), ('Na', 11), ('Mi', 12), ('Al', 13), ('Si', 14), ('P', 15), ('S', 16), ('Cl', 17), ('Ar', 18), ('K', 19), ('Ca', 20)]

となっているため、
これをdict型に整形し完了です。

以上になります。 もし何かこれもある!とあればぜひ教えてください。