次に解説されているPythonの5つの関数を学びます。

5 Useful Things to Know in Python

I. List comprehensions

1. List comprehensions

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(前項)”に相当します。

2. List comprehensions with conditions

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']

II.Dictionary comprehensions

The syntax

key:value for key, value in iterable}

Dcitionarryはキーと値のペアからなるデータの形式です。キーで値を取得することができます。

1.辞書の作成

リストから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["室伏 広治"]
## '室伏広治'

2.辞書から辞書を作成

階層のある辞書を作成し、キーと下の階層の値から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を使う。'}

3. Dictionary comprehensions with conditions

キー’japanese’の値を表示します。

item = 'japanese'
res = [sub[item] for sub in jargons.values() if item in sub.keys()]
print(res)
## ['パイソン', 'R', 'Julia', 'Java', 'JavaScript', 'ライブラリ', 'パッケージ', '統計解析', 'ターミナル', '仮想環境']

III. Lambda Expressions

名前のない関数です。名前がないということは、あとで呼び出すことができないので、使い捨ての関数といえます。

ふつうに、コードを簡略にするために使用できますが、一般的には、関数の一部と使用されることが多いです。

例えば、次は辞書のキーの番号順に並べるのに、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: '菅義偉'}