次に解説されているPythonの5つの関数を学びます。
5 Useful Things to Know in Python
The syntax
[expression for item in iterable]
例をあげます。
numbers = [1, 2, 3, 4, 5]
[num*2 for num in numbers]
## [2, 4, 6, 8, 10]
コードの意味は、後ろから読んだ方がわかりやすいです。
この場合は、numbersというリストの項目を前から順番に取り出し、それをnumとして、num*2を計算し、その答えを順に並べてリストを作成する、と言う意味です。
“num”は適当な文字でよいです。
次のようにinの後にリストの項目を書いてもかまいません。
[n*2 for n in [1, 2, 3, 4, 5]]
## [2, 4, 6, 8, 10]
次に、リストが文字列の場合の例を示します。
大文字を小文字にして、スペースをアンダーバーに代えます。列名をクリーンにするときに使います。
column_names = ['ITEM 1', 'Item 2', 'Item3']
[names.lower().strip().replace(' ', '_') for names in column_names]
## ['item_1', 'item_2', 'item3']
“names.lower()”は、リストcolumn_namesから取り出した項目を小文字にすると言う意味です。続く“.strip()”は、複数のスペースを1つに減らすと言う意味です。
このように、“前項.function”は、ふつうの数学の表記なら“function(前項)”に相当します。
The syntax
[expression for item in iterable if condition == True]
リストから奇数を取り出すコードは次です。
# simple
num_list = [1,2,3,4,5, 6, 7, 8, 9, 10]
[num for num in num_list if num%2 != 0]
## [1, 3, 5, 7, 9]
関数を条件とすることもできます。
名前をアーギュメントとして70歳を超える場合はその名を返す関数を作成します。
この関数を自民党の役員のリストに適応して、取り出された名を大文字にします。
# create a function
def vip(name):
return name in ('toshihiro nikai', 'yasuaki yamaguchi', 'hiroshi moriyama')
# list
LDP = ('toshihiro nikai', 'tsutomo sato', 'hakubun shimomura', 'yasuaki yamaguchi', 'hiroshi moriyama')
# convert letters to uppercase
[name.upper() for name in LDP if vip(name)]
## ['TOSHIHIRO NIKAI', 'YASUAKI YAMAGUCHI', 'HIROSHI MORIYAMA']
The syntax
key:value for key, value in iterable}
Dcitionarryはキーと値のペアからなるデータの形式です。キーで値を取得することができます。
リストからdictionary comprehensionsでdictionaryを作成します。値は、リストからlist comprehensionsで作成します。
キーは名前とみょう字の間にスペースがあります。値はスペースなしです。
# list comprehensions and dictionary comprehensions
names = ['室伏 広治', '丸川 珠代', '馳 浩', '秋元 康', '武藤 敏郎']
names_replaced = [name.replace(" ", "") for name in names]
dic0 = {i:i.replace(" ", "") for i in names}
dic0
## {'室伏 広治': '室伏広治', '丸川 珠代': '丸川珠代', '馳 浩': '馳浩', '秋元 康': '秋元康', '武藤 敏郎': '武藤敏郎'}
例えば、“室伏 広治”の値にアクセスするコードは次です。
dic0["室伏 広治"]
## '室伏広治'
階層のある辞書を作成し、キーと下の階層の値からdictionary comprehensionで新たな辞書を作成します。
階層のある辞書を作成します。
# create a dictionary
jargons = {"Python": {
"categories": "languages",
"japanese": "パイソン",
"meaning": "大人気の汎用言語。",
"frequency": 5,
"difficulty": 3,
"priority": 5,
"comments": "Excelのような表(データ・フレーム)を扱う場合は、ライブラリPandasを使用。",
"link1": "http://www.mishou.be/2020/11/06/pythonr-%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%aa%e3%81%97%e3%81%a7python%e3%81%a8r%e3%82%92%e5%90%8c%e6%99%82%e3%81%ab%e5%ad%a6%e3%81%b6-google-colaboratory-ver-1/",
"link2": "NaN"},
"R": {
"categpries": "languages",
"japanese": "R",
"meaning": "統計解析に最適な言語。機械学習もできる。",
"frequency": 5,
"difficulty": 3,
"priority": 5,
"comments": "ライブラリTidyverseから学べばわかりやすい。RStudioを使うのがお勧め。",
"link1": "http://www.mishou.be/2020/11/06/pythonr-%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%aa%e3%81%97%e3%81%a7python%e3%81%a8r%e3%82%92%e5%90%8c%e6%99%82%e3%81%ab%e5%ad%a6%e3%81%b6-google-colaboratory-ver-1/",
"link2": "https://rstudio.com/"},
"Julia": {
"categories": "languages",
"japanese": "Julia",
"meaning": "Pythonに比較される言語。",
"frequency": 3,
"difficulty": 3,
"priority": 3,
"comments": "Pythonより処理が速い。コードがわかりやすい。Junoで実行するのがお勧め。",
"link1": "http://www.mishou.be/2020/02/18/juliajuno-juliajuno%e5%85%a5%e9%96%801_%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%a8%e5%a7%8b%e3%82%81%e6%96%b9/",
"link2": "NaN"},
"Java": {
"categories": "languages",
"japanese": "Java",
"meaning": "伝統ある汎用言語。コードは直感的でわかりやすいが、やたら長い。",
"frequency": 5,
"difficulty": 3,
"priority": 4,
"comments": "初心者の説明ですので誤っているかもしれません。",
"link1": "http://www.mishou.be/2020/10/08/java-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e5%ad%a6%e3%81%b6-ver-1/",
"link2": "NaN"},
"JavaScript": {
"categories": "languages",
"japanese": "JavaScript",
"meaning": "Web関連言語で大人気。",
"frequency": 5,
"difficulty": 3,
"priority": 5,
"comments": "初心者の説明ですので誤っているかもしれません。",
"link1": "http://www.mishou.be/2021/01/08/javascript-%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e5%ad%a6%e3%81%b6_%e6%ba%96%e5%82%99-ver-1/",
"link2": "NaN"},
"library": {
"categories": "terms",
"japanese": "ライブラリ",
"meaning": "特定の作業に必要な道具のセット。Installは一度、importは作業ごとに必要。",
"frequency": 5,
"difficulty": 2,
"priority": 5,
"comments": "NaN",
"link1": "NaN",
"link2": "NaN"},
"package": {
"categories": "terms",
"japanese": "パッケージ",
"meaning": "ライブラリをいれる箱。ライブラリは箱に入れて運ばれ、インストールされる。",
"frequency": 5,
"difficulty": 2,
"priority": 5,
"comments": "Packageをインストールするのとlibraryをインストールするのは同じ。",
"link1": "NaN",
"link2": "NaN"},
"statistical analysis": {
"categories": "statistics",
"japanese": "統計解析",
"meaning": "統計学に基づくデータの集計やグラフ作成。",
"frequency": 4,
"difficulty": 5,
"priority": 4,
"comments": "NaN",
"link1": "NaN",
"link2": "NaN"},
"terminal": {
"categories": "computer",
"japanese": "ターミナル",
"meaning": "コードでファイルを操作する。ファイルの作成、削除、移動、書き込みなどができる。",
"frequency": 4,
"difficulty": 3,
"priority": 4,
"comments": "MacではApplicationsのUtilitiesのTerminal.appをクリックすると開く。Windowではコマンド・プロンプト。",
"link1": "NaN",
"link2": "NaN"},
"virtual environment": {
"categories": "computer",
"japanese": "仮想環境",
"meaning": "Pythonでは仮想環境構築が普通。Pythonやライブラリは仮想環境ごとにインストール。",
"frequency": 4,
"difficulty": 2,
"priority": 4,
"comments": "Rで仮想環境を構築することは少ない。構築する場合はライブラリかAnacondaを使う。",
"link1": "NaN",
"link2": "NaN"}
}
辞書jaragonsのキー10件とその値の辞書のキー“comments”の値から、新たな辞書を作成します。
{word: items["comments"] for word, items in jargons.items()}
## {'Python': 'Excelのような表(データ・フレーム)を扱う場合は、ライブラリPandasを使用。', 'R': 'ライブラリTidyverseから学べばわかりやすい。RStudioを使うのがお勧め。', 'Julia': 'Pythonより処理が速い。コードがわかりやすい。Junoで実行するのがお勧め。', 'Java': '初心者の説明ですので誤っているかもしれません。', 'JavaScript': '初心者の説明ですので誤っているかもしれません。', 'library': 'NaN', 'package': 'Packageをインストールするのとlibraryをインストールするのは同じ。', 'statistical analysis': 'NaN', 'terminal': 'MacではApplicationsのUtilitiesのTerminal.appをクリックすると開く。Windowではコマンド・プロンプト。', 'virtual environment': 'Rで仮想環境を構築することは少ない。構築する場合はライブラリかAnacondaを使う。'}
キー’japanese’の値を表示します。
item = 'japanese'
res = [sub[item] for sub in jargons.values() if item in sub.keys()]
print(res)
## ['パイソン', 'R', 'Julia', 'Java', 'JavaScript', 'ライブラリ', 'パッケージ', '統計解析', 'ターミナル', '仮想環境']
名前のない関数です。名前がないということは、あとで呼び出すことができないので、使い捨ての関数といえます。
ふつうに、コードを簡略にするために使用できますが、一般的には、関数の一部と使用されることが多いです。
例えば、次は辞書のキーの番号順に並べるのに、sortedの中でlambda関数を用いています。
leaders.items( )でleadersのキーと値のペアをリストとして取り出します。lamda関数でそれぞれのリストの1つ目のエレメントをキーとします。
leaders = {4: "菅義偉", 2: "野田佳彦", 3: "安倍晋三", 1: "菅直人"}
print(leaders)
## {4: '菅義偉', 2: '野田佳彦', 3: '安倍晋三', 1: '菅直人'}
leaders = dict(sorted(leaders.items(), key=lambda x: x[0]))
print(leaders)
## {1: '菅直人', 2: '野田佳彦', 3: '安倍晋三', 4: '菅義偉'}