はじめに
Pythonを勉強するため、東京工業大学の岡崎教授が出題されている言語処理100本ノック 2015を解いていきます。
より深く理解するため、別解や利用したライブラリの解説もまとめていきます。
環境
Python3.6
OS : mac
問題
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文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.
解答
sentensce = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
# 1文字取り出す単語
initials = [1, 5, 6, 7, 8, 9, 15, 16, 19]
# スペースで分ける
words = sentensce.split()
print(words)
# => ['Hi', 'He', 'Lied', 'Because', 'Boron', 'Could', 'Not', 'Oxidize', 'Fluorine.', 'New', 'Nations', 'Might', 'Also', 'Sign', 'Peace', 'Security', 'Clause.', 'Arthur', 'King', 'Can.']
# 元素記号
element_symbols = {}
for it, word in enumerate(words):
if it + 1 in initials:
# 先頭一文字だけ
element_symbols[it+1] = word[0]
else:
# 2文字
element_symbols[it+1] = word[:2]
print(element_symbols)
出力
{1: 'H', 2: 'He', 3: 'Li', 4: 'Be', 5: 'B', 6: 'C', 7: 'N', 8: 'O', 9: 'F', 10: 'Ne', 11: 'Na', 12: 'Mi', 13: 'Al', 14: 'Si', 15: 'P', 16: 'S', 17: 'Cl', 18: 'Ar', 19: 'K', 20: 'Ca'}
解説
先頭の1文字だけ取り出す単語の順番をinitials
としました。
03. 円周率と違い末尾の,
や.
は無関係であるため、単純にstr.split()
を使って半角スペースで分けています。
配列のイテレータは0から始まるため、n番目はit+1
で調整しています。
if it + 1 in initials:
はinitialsにit+1
が含む場合となります。
別解:連想配列
sentensce = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
# 1文字取り出す単語
initials = [1, 5, 6, 7, 8, 9, 15, 16, 19]
element_symbols = {it+1: word[0] if it + 1 in initials else word[:2] for it, word in enumerate(words)}
# => {1: 'H', 2: 'He', 3: 'Li', 4: 'Be', 5: 'B', 6: 'C', 7: 'N', 8: 'O', 9: 'F', 10: 'Ne', 11: 'Na', 12: 'Mi', 13: 'Al', 14: 'Si', 15: 'P', 16: 'S', 17: 'Cl', 18: 'Ar', 19: 'K', 20: 'Ca'}
解説
連想配列の操作はlist型の配列以外にも、dict型やtuple型でも出来ます。
dict型の場合、{key: value}となるようにして下さい。
Python:ファイルダウンロードの進行状況とファイルサイズを表示する方法。urllib
Pythonschedule2024-02-27
【Python】tqdmでforの進捗状況を表示する
PythonColabolatoryschedule2021-02-16
学習済みの日本語単語ベクトルをColabolatoryで試してみる
自然言語処理PythonColabolatoryschedule2021-02-04
Unity ML-Agentsで新しく学習環境を作る
Unity機械学習C#PythonDeepLearningschedule2021-01-22
27. 内部リンクの除去
自然言語処理100本ノックPythonschedule2020-03-17