Programming lab

Pythonで覚えておくと便利な基本構文【データサイエンス】

Pythonで覚えておくと便利な基本構文【データサイエンス】

 

 

  • 基本的な構文はマスターしたので、もう少し高度な構文を書きたい
  • データサインエンス・競技プログラミンでよく使用される構文を知りたい

この悩みを本記事で解決していきます。

本記事の内容

  1. Print関数と合わせて使う便利な構文
  2. for文の機能をさらに拡張した構文
  3. リスト内包表記
  4. 関数定義で便利な機能
  5. ラムダ式(無名関数)
  6. map
  7. イテレータについて

本記事を読むメリット

  1. データサイエンスで使用される便利な構文が学べる
  2. 競技プログラミングで使用される便利な構文が学べる

 

Pythonに特化したプログラミングスクールについて知りたい方は下記を参考にしてください。

【最新】Pythonに強いプログラミングスクール7選(東大生のオススメ)Pythonの流行と共にPythonに強いプログラミングスクールが増えてきました。この記事では、プログラミング経験豊富な私が本当にオススメできるPythonに強いプログラミングスクールを7つ紹介しました。...

 

Print関数と合わせて使う便利な構文

print関数の便利なコードを紹介していきます。

主に文字列に値を代入する方法を説明していきます。

format : 文字列に値を代入

 

formatを用いて文字列に値を代入することができます。

データ解析の現場でも使用頻度は高いので覚えておきましょう。

animal = 'cat'

print('This is {}.'.format(animal))

 

<出力>

This is cat.

 

代入したい箇所を『{…}』で指定し、formatで代入するものを指定してください。

名前を使って埋め込む引数を指定することができます。

print('These are {a}, {b} and {c}.'.format(a="cat", b='dog', c='rabbit'))

 

<出力>

These are cat, dog and rabbit.

 

かなり自由度の高い書き方ができますね。

f文字列 : 文字列に値を代入

 

f文字列の基本的な機能は、formatと変わりませんが、とてもコンパクトにコードを書くことができるため、よく使用されます。

animal = 'cat'

print(f'This is {animal}.')

 

<出力>

These are cat, dog and rabbit.

 

f文字列の場合は、先頭に『f』をつけるだけで値を代入することができます。

代入する値の書式設定

 

『{値:書式}』で代入する値の書式を設定できます。

よく使用する書式は、以下の二つです。

  • {値:,}  :  位取り
  • {値:.1f} : 少数第一位まで表示(数字は任意に変更可)

formatとf文字列の具体例を示します。

a1 = 120000000
a2 = 1.234567

# formatの場合
print('{:,} : {:.2f}'.format(a1, a2))

# f文字列の場合
print(f'{a1:,} : {a2:.1f}')

 

for文の機能をさらに拡張した構文

単純なfor文で書けるけど、簡潔に書くのに便利な機能を紹介していきます。

辞書型のkeyとvalueを同時に利用する

 

for文を使って辞書型のkeyとvalueを同時に利用することができます。

dict = {'a1':1, 'a2':2  }

for key, value in dict.items():
    print(key, ':', value)

 

<出力>

a1 : 1
a2 : 2

 

enumerate関数 : インデックス番号を同時に利用する

 

enumerate関数を使用することで、インデックス番号を同時にfor文のように利用することができます。

list1 = ['a1', 'a2', 'a3']

for index, lis in enumerate(list1):
    print(index,':', lis)

 

<出力>

0 : a1
1 : a2
2 : a3

 

zip関数 : 複数の要素を同時に利用する

 

zip関数を利用することで、複数の要素を同時に利用することができるようになります。

list1 = ['a1', 'a2', 'a3']
list2 = ['b1', 'b2', 'b3']
list3 = ['c1', 'c2', 'c3']

for lis1, lis2, lis3 in zip(list1, list2, list3):
    print(lis1, ':', lis2, ':', lis3)

 

<出力>

a1 : b1 : c1
a2 : b2 : c2
a3 : b3 : c3

 

リスト内包表記

 

リスト内包表記という書き方を使用することで、コードをさらに簡潔に書くことができます。

また、リスト内包表記で書くことで、コードの処理スピードが上がります。

リスト内包表記

 

リスト内包表記の書き方は、『処理 for 変数 in イテラブル』です。

list1 = [1, 2, 3]

list2 = [lis1**2 for lis1 in list1]
print(list2)

 

<出力>

[1, 4, 9]

 

リスト内包表記(条件付き)

 

条件にあった変数のみ、変数として使用されるように設定することができます。

『処理 for 変数 in イテラブル if 条件文』のように利用します。

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# list1の中で偶数値のみ使用する
list2 = [lis1 for lis1 in list1 if lis1%2 == 0]
print(list2)

 

<出力>

[2, 4, 6, 8, 10]

 

if文以降で、lis1という変数が条件を満たしてるかを確認し、条件を満たす場合は、イテラブルとして使用されます。

辞書内包表記

 

辞書内包表記もリスト内包表記が理解できていれば簡単です。

list1 = ['a1', 'a2', 'a3']
list2 = [100, 200, 300]

dict = {lis1:lis2 for lis1, lis2 in zip(list1, list2)}
print(dict)

 

<出力>

{'a1': 100, 'a2': 200, 'a3': 300}

 

このように、zip関数を用いて簡単に作成できます。

関数定義で便利な機能

関数定義で便利な機能を紹介していきます。

引数をタプル化(*args)

 

引数に『*args』を設定することで、引数をタプル化することができます。

引数が何個入ってくるかわからない場合に使用することが多いです。

def animal(*args):
    print(args)
    
animal('cat', 'dog', 'rabbit')

 

<出力>

('cat', 'dog', 'rabbit')

 

中でfor文で使用することも多いです。

# 関数内でfor文を使用
def animal(*args):
    for arg in args:
        print(arg)
        
animal('cat', 'dog', 'rabbit')      

 

<出力>

cat
dog
rabbit

 

キーワード引数を辞書化(**kwargs)

 

引数に『**kwargs』を設定することで、キーワド引数も辞書化することができます。

def animal(**kwargs):
    print(kwargs)
    
animal(animal1='cat', animal2='dog', animal3='rabbit' )

 

<出力>

{'animal1': 'cat', 'animal2': 'dog', 'animal3': 'rabbit'}

 

同様に、for文を使って利用することが多いです。

def animal(**kwargs):
    for key, value in kwargs.items():
        print(key,':', value)
        
animal(animal1='cat', animal2='dog', animal3='rabbit' )

 

<出力>

animal1 : cat
animal2 : dog
animal3 : rabbit

 

ラムダ式(無名関数)

 

わざわざ、定義する必要がない関数を使用する時に使用するのが、ラムダ式です。

ラムダ式を使用することでコードが簡潔になります。

使用方法は、『lambda 引数 : 実行したい内容』のように書きます。

duble = lambda x : 2 * x
duble(3)

 

<出力>

6

 

さらに簡潔に以下のように書くことができます。

(lambda x : 2 * x)(3)

 

<出力>

6

 

map : リストの要素をまとめて処理

mapを使用することで、リストの要素を順番に取り出し、その要素に指定の処理を実行することができます。

使用方法は、『map(関数 : イテラブル)』として使用します。

*mapを実行したものは、『map型』の値になるので、『list()』使用しリストに戻してください

list1 = ['1', '2', '3', '4']

# mapはmap型になっているのでlist()を実行
list2 = list(map(int, list1))
print(list2)

 

<出力>

[1, 2, 3, 4]

 

ここで、ラムダ型が有効活用されます。

list1 = [1, 2, 3, 4]

list2 = list(map(lambda x : x**2, list1))
print(list2)

 

<出力>

[1, 4, 9, 16]

 

イテレータについて

 

イテレータについて解説していきますが、まずは用語の意味を整理しておきましょう。

  • イテラブル : 要素を順に取り出せるオブジェクト(リスト, 辞書など)
  • イテレータ : ある値の要素を順番に1つずつ取り出すオブジェクト
  • ジェネレータ : イテレータを作る関数

少し抽象的なので、イテレータとイテラブルの違いは以下のコードを動かしてみて理解しましょう。

iter : イテラブルからイテレータを作成

 

iter()の引数にイテラブルを設定することで、イテラブルを作成することができます。

list1 = ['a1', 'a2', 'a3']
iterator1 = iter(list1)

 

これで、イテレータが作成できました。

next : イテレータから要素を取り出す

 

next(イテレータ)とすることで、イテレータから要素を1つ取り出せます。

list1 = ['a1', 'a2', 'a3']
iterator1 = iter(list1)

print(next(iterator1))
print(next(iterator1))
print(next(iterator1))

 

<出力>

a1
a2
a3

 

このように、nextを利用することでイテレータから要素を一つ取り出すことができます。

また、イテレータの『要素を順番に一つずつ取り出せる』という動作もわかりますね。

ジェネレータでイテレータを作成する

 

次は、ジェネレータ関数でイテレータを作成します。

関数定義の『return』の代わりに『yield』を使用することで簡単に作成することができます。

def gen():
    yield 'a1'
    yield 'a2'
    yield 'a3'
    
generator1 = gen()

 

これで、イテレータを作成できました。

同様に、nextを使用して要素を取り出すことができます。

def gen():
    yield 'a1'
    yield 'a2'
    yield 'a3'
    
generator1 = gen()

print(next(generator1))
print(next(generator1))
print(next(generator1))

 

<出力>

a1
a2
a3

 

for文としても使うことができます。

*全ての要素が取り出し終わるとforループは終了します。

def gen():
    yield 'a1'
    yield 'a2'
    yield 'a3'
    
generator1 = gen()

for i in generator1:
    print(i)

 

<出力>

a1
a2
a3

 

まとめ

 

本記事では、Pythonで覚えておくと便利な構文を紹介しました。

本記事の内容

  1. Print関数と合わせて使う便利な構文
  2. for文の機能をさらに拡張した構文
  3. リスト内包表記
  4. 関数定義で便利な機能
  5. ラムダ式(無名関数)
  6. map
  7. イテレータについて

これらが理解できたら、次は、Pythonのライブラリを使いこなすことに挑戦しましょう。

Pythonに特化したプログラミングスクールに関しては下記を参考にしてください

【最新】Pythonに強いプログラミングスクール7選(東大生のオススメ)Pythonの流行と共にPythonに強いプログラミングスクールが増えてきました。この記事では、プログラミング経験豊富な私が本当にオススメできるPythonに強いプログラミングスクールを7つ紹介しました。...
ABOUT ME
努力のガリレオ
【運営者】 : 東大で理論物理を研究中(経歴)東京大学, TOEIC950点, NASA留学, カナダ滞在経験有り, 最優秀塾講師賞, オンライン英会話講師試験合格, ブログと独自コンテンツで収益6桁達成 【編集者】: イングリッシュアドバイザーとして勤務中(経歴)中学校教諭一種免許取得[英語],カナダ留学経験あり, TOEIC650点