python

pythonの便利ショートカット10選【前編】

ショートカットは覚えておくと開発効率が段違いに上がります。

個人的に便利だと思ったものを10個紹介します。

今回は前編として、5個紹介します。

F Strings

はじめに紹介するのが、F Stringsです。これはバージョンが3.6以上で使用できます。

この機能は、文字列の中に変数を埋め込むことができるものです。

普通はカンマや+を用いて文字列と連結させるような形でやりますが、意外とめんどくさいです。

例を見てみましょう。

name = "Tom"
# 普通の書き方
print("Hello", name)
print("Hello " + name)
# F Stringsの書き方
print(f"Hello {name}")

特徴としてはカーリーブラケットを使う点ですね。fは大文字でも小文字でも構いません。 ダブルクォートも文字列として出力したい場合にはシングルクォートに置き換えても大丈夫です。

print(f"Hello {name} {name * 2}")
print(f"Hello {name} {2 + 2}")
print(f"Hello {name} {[1, 2, 3]}")

使い方は限られますが、F Strings内で四則演算やリストを書くこともできます。

最後に便利な使い方を紹介しておきます。

F Stringsはprintと併用して使われることが多いですが、変数にも格納できます。

x = f"Hello {name} {[1, 2, 3]}"
print(x)

unpacking

一言でいうと、リストなどの複数の要素を持つものを分解して各変数に入れる機能です。

至る所で使用するので、この機会に覚えて使えるようにすると便利です。

tup = (1, 2, 3, 4, 5)

lst = [1, 2, 3, 4, 5]

string = "hello"

dic = {"a": 1, "b": 2}

a, b, c, d, e = tup
print(a, b, c, d, e)
> 1 2 3 4 5

よく使う場面としては、辞書型を展開するときです。辞書型はキーと値ーを一括りにして取り出す方法と値だけの使い方があるのでそのやり方も見ておきます。

a, b = dic.items()
print(a, b)
> ('a', 1) ('b', 2)
a, b = dic.values()
print(a, b)
> 1, 2

itemsだとtupleで出力され、valuesを使うと値のみ取り出せます。用途によって使い分ければいいので、こういうことができるっていうことだけ知ってれば大丈夫です。

multiple assignment

変数aとbの要素を入れ替えたい場合があったとします。その際にbの要素をaに移した場合、aの要素が消えてしまうので一旦aの要素を逃すための変数を用意する必要がありました。その手間をなくしたのがmultiple assignment機能です。

width, height = 400, 500

temp = width
width = height
height = temp

これが従来のやり方です。multiple assimentで書き換えるとこのようになります。

width, height = 400, 500
width, height = height, width

コードがスッキリしました。pythonコードを書くときはこれを利用しましょう

comprehensions

英語のままだと聞き慣れないですが、日本語だと内包表記のことを指します。

0が100個のリストを作りたいとします。真っ先に思いつくのがforループでの実装だと思うのでとりあえず書いてみます。

x = []

for i in range(100):
    x.append(0)

この書き方はもうしないので、忘れてください。

x = [0 for i in range(100)]

リスト内包表記を使うことで、一行で書くことができます。少し応用すると、0~100の間から偶数のみを取り出してリストに格納することもできます。

x = [i for i in range(100) if i % 2 == 0]

他にも二重forループもできます。ただやりすぎるとコードの可読性が落ちるので注意しましょう。

x = [i*j for i in range(100) for j in range(10)]

察しのいいかたは気付いているかもしれませんが、当然リストもネストできます。

x = [[0 for _ in range(5)] for _ in range(5)]

リスト内包表記ではないですが、comprehensionsの機能として[]を()に変更することで、ジェネレーターが作成できます。

x = (i for i in 'hello')

print(x)
> <generator object <genexpr> at 0x1085133c0>

このままだとジェネレーターオブジェクトとして出力されますが、listもしくはtuppleに変換すれば中身が表示できます。

x = (i for i in 'hello')

print(list(x))

辞書型も扱うことができます。よく見かける場所としては自然言語処理のBoWあたりです。文章が与えれて、単語の頻出度合いを調べたりするにも使えます。文章をアルファベット毎の頻出度合いに分解してみます。

sentence = '''
In this project, we are going to create an AI based Mouse Controller.
We will first detect the hand landmarks and then track and click based on these points.
We will also apply smoothing techniques to make it more usable.
'''
x = {char: sentence.count(char) for char in set(sentence)}

print(x)

object Multiplication

最初の方で用いましたが、掛け算を行うには*演算子を用います。ただ、文字列などの場合には繰り返し処理になります。

x = "hello" * 5
y = [1, 2, 3] * 5
z = [[1, 2, 3]] * 5
print(x)
print(y)
print(z)

前編として、pythonのショートカットを5つ紹介しました。

次回は、後編として残りの5つを紹介します。