このサイトについて

大人 meets プログラミング,Pythonで人生をハックしよう。
8月12日(日),プログラミングとAIのリテラシーをサックリと学ぶ講座を開発します。 (主催:角川アスキー総合研究所)

30秒で分かるPythonコード集

30秒で分かるPythonコード集

30 secounds of Python codeは,その名の通り「30秒で理解できるPythonのコード集」。リスト要素のソートやシャッフル,数値列の平均の計算など,親しみやすい課題やアルゴリズムをPythonで書いたコード集。それぞれのコードは短いので,プログラムの挙動を文字通り「30秒」で理解できる。

たとえば,リスト要素のシャッフル(ランダムな並べ替え)のコードを見てみよう。

from copy import deepcopy
from random import randint

def shuffle(arr):
    temp_arr = deepcopy(arr)
    m = len(temp_arr)
    while (m):
        m -= 1
        i = randint(0, m)
        temp_arr[m], temp_arr[i] = temp_arr[i], temp_arr[m]
    return temp_arr

フィッシャー–イェーツのアルゴリズム」を使って,リストの要素をまぜこぜにしている。それほど難しくないので,実際にコードを読めば内容を理解できると思うけど,念のためポイントを解説する。

まず関数の中でdeepcopy()を使ってリストのコピーを取る。「temp_arr = arr」のように引数として受けたリストを単に代入すると,引数のリスト自体の並び順が変わってしまうからだ。whileループの中では,実際に要素の順番を入れ替えている。randint()関数を使ってリストを入れ替える先のインテックスを生成して,その次の行で要素の入れ替えを行っている。temp_arrをインデックスで参照している部分が似たようなコードで分かりづらいけど,よく見ると左辺と右辺で角括弧の中にある変数が異なっている(左辺はm,iで,右辺はi,m)。Pythonでは「a, b = b, a」のような代入すると,要素の入れ替えができるのだ。

Pythonの文法を知っている人でも,自分で思ったようなプログラムを作れない人は意外と多いはずだ。プログラムの動きをイメージできないことがつまづきのポイントになりやすい。短いコードを読んで,動きを頭の中で追って理解することで,プログラムの動きが分かるようになるはずだ。そうすれば,少しずつ自分で思ったようなプログラムが作れるようになる。30 secounds of Python codeは,そんな勉強にピッタリのコード集と言える。

コードにlambdaやreduceなどの高階関数が使われていたり,少しトリッキーな所もある。そういうコードは自分でループやリスト内包表記に書き換えると,より深く勉強できてよいと思う。

2018-02-26 12:00