LoginSignup
12
15

More than 3 years have passed since last update.

Pythonのかっこいい書き方まとめ

Last updated at Posted at 2019-04-10

TL;DR

人のコードを見ていて、かっこいいなと思ったものをまとめていこうと思います。
かっこいい、かっこ悪いの感じ方には個人差があります。
順次更新 190512

zipを使って2つのリストを一気にfor loopを回す

普段は

a = [1, 2, 3, 4, 5]
b = [11, 12, 13, 14, 15]

上のようなリストのそれぞれ対応している部分をループさせるときにはindexを指定してやってたんですが、zipを使うと同時に回せることを知りました。

#かっこよくないやつ
for i in range(len(a)):
  print(a[i], b[i])
#かっこいいやつ
for x, y in zip(a, b):
  print(x, y)

enumurateを使ってリストとindexを同時に回す

毎回cnt=0を定義してcntを更新するという愚行を繰り返してたんですがenumurateを知ってから非常にいい感じにかけるようになりました。

#かっこよくないやつ
cnt=0
for x in a:
  cnt+=1
  print(cnt, x)
#かっこいいやつ
for i, x in enumerate(a):
  print(i, x)

全探索するときにitertools.productを使う

a, bの要素を全探索する際にnestを使って二重ループをすると思います。
しかしitertools.productを使うとイテレーターを使って全探索してくれるので綺麗にかけることを最近知りました。

#かっこよくないやつ
for x in a:
  for y in b:
    print(x, y)
#かっこいいやつ
import itertools
for x, y in itertools.product(a,b):
  print(x,y)

numpyアレイの全要素に順番にアクセス

shapeでアレイの形とってきて、それを使って全探索とかしてましたがこれもnumpy.nditerを使えばシンプルにかけるようです。書いてて思ったけどめちゃくちゃシンプルになってるかと言われるとわからない。でもかっこいいので。


import numpy as np
arr=np.random.randn(3,3)
print(arr)

column, row=arr.shape
for i in range(column):
    for j in range(row):
        print("("+str(i)+","+str(j)+")")
        print(arr[i,j])

nditer = np.nditer(arr, flags=['multi_index'])
while not nditer.finished:
    print(nditer.multi_index)
    print(arr[nditer.multi_index])
    nditer.iternext()

カレントディレクトリの特定拡張子のファイルリストの取得

osモジュールを使えばできるんですが、globモジュールを使うとシンプルです。.jpgファイルを取得してみます。

import os
import glob

#かっこよくないやつ
jpgs = [file for file in os.listdir('.') if file.endswith('.jpg')]

#かっこいいやつ
jpgs = glob.glob('*.jpg')

再帰的にディレクトリ内のファイルを取得

os.walkを使ってぐちゃぐちゃやってましたが、これもglob使えばできるらしく
globはすごい!

glob.glob("path/**", recursive=True)

tqdmを使ってプログレスバーを表示する

長いループ回してる時にこれ終わるのか?みたいなことがありますよね。そこでtqdmを使えば簡単にプログレスバーを出すことができます。使い方はiteratorの前にtqdm.tqdmで囲むだけ。

import tqdm

for i in tqdm.tqdm(range(10000)):
  pass

こんな感じのプログレスバーが簡単に書けます。

100%|██████████| 10000/10000 [00:00<00:00, 1360197.17it/s]

matplotlibの日本語化

基本的にmatplotlibは日本語を認識しません。よくある日本語化手法としては、フォントをいじったりとかが挙げられますが、1行で日本語化できることを知りました。

import japanize_matplotlib

あ、pip install japanize_matplotlibは必要なので、厳密には最初だけ2行ですね。

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15