こんにちは!
テービーテックの村松です。
「本日の関数」シリーズに続きまして小ネタ集その2です。
「言語処理100本ノック2020]」
nlp100.github.io
に挑戦していきます!
ちょっとずつですが進めてまいりますので、
途中でくじけないか見守ってください・・・。
そして、皆さんも一緒に挑戦してみましょう!
では、さっそくまいります!
第1章: 準備運動
00.文字列の逆順
「文字列”stressed”の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.」
t = 'stressed' t[::-1] ##結果 'desserts'
スライスという操作になります。
リストの時にも使えますね。
[]の中の意味は[start : end : step]。
[3 : 5 : 1]なら3から5までを1つ間隔といった感じになります。
省略した時は[最初の要素 : 最後の要素 : 1]とされます。
今回は逆順にするのでstepを「-1」にしました。
01.「パタトクカシーー」
「「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ.」
t = 'パタトクカシーー' t[1::2] ##結果 'タクシー'
続いて同じくスライス操作で奇数の文字を抜き出しました。
[1::2]で1番目('タ')から最後までを2つ間隔で抜き出す、になります。
02.「パトカー」+「タクシー」=「パタトクカシーー」
「「パトカー」+「タクシー」の文字を先頭から交互に連結して文字列「パタトクカシーー」を得よ.」
t1 = 'パトカー' t2 = 'タクシー' new = '' for i in range(4): new += t1[i] new += t2[i] new ##結果 'パタトクカシーー'
今回は4文字ずつなのでfor文を使って4回「i」番目の文字を「new」に加えていきました。
03.円周率
「「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ.」
sentence = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.' #「,」「.」を取り除きたい import re _sentence = re.sub("[^a-zA-Z]"," ", sentence) # 単語に区切る list = _sentence.split() # 単語の時数を数えてリストにする list2 = [] for i in list: list2.append(len(i)) list2 ##結果 [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
「,」「.」などの余分な文字を無くす方法は色々あります。
今回は以前のブログで使用していたre.sub()を使いました。
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文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.」
elements = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.' #「,」「.」を取り除き、単語に分ける。 import re _elements = re.sub("[^a-zA-Z]"," ", elements) _elements = _elements.split() # for文の中でenumerate()を使ってインデックス番号を取得する。 # 取得したインデックスと要素をひとまずリストにしまう。 list_e = [] list_num = [] for i, element in enumerate(_elements, 1): list_num.append(i) list_e.append(element) # 頭文字1文字にする奴と2文字にする奴を変換。 # 辞書にしまう。 d = {} for h, g in zip(list_num, list_e): if h in [1, 5, 6, 7, 8, 9, 15, 16, 19]: d.update([(h, g[0])]) else: d.update([(h, g[:2])]) print(d) ## 結果 {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'}
ひとまず5題。
残り95題です・・・!