週末副業記

土日は副業エンジニアのブログです。副業に関することを投稿します。

転倒数を数える[Python]


f:id:aisakakun:20160211195612j:plain

転倒とは

転倒とは、自然な順番に並んでいない要素の配列のペアです。

転倒数とは

例えば、昇順で使うとしたら

[1,2,4,3,5]

 の場合、[4,3]のみが昇順となっていないため、転倒数は1になります。

また、

[1,2,5,3,4] 

 の場合、[5,3],[5,4]が昇順となっていないため、転倒数は2になります。

コード

実装としてはこのようになります。

 

この状態では冗長性が高いので、このようにリファクタリング

 

解説

まず、sum()は、カッコ内の要素を足し合わせた値を出力する関数です。

そして、そのカッコ内に再びsum()

for i,n in enumerate(sequence)

sequenceはリストであり、例えば

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

 です。

そして、enumerate( ) = 列挙する、数え上げる。

「ループする際にインデックスつきで要素を得ることができる」という機能を持っています。

例えば、

a = ["l","m","n"] 

for i,n in enumerate(a):

     print(i,n)

--------出力------

→0 l

 1 m

 2 n

そして少し前に戻り、

m<n for m in sequence[ i+1: ] 

ですが、前の「m<n」が条件で、mの値がnよりも小さいとき。

mは、sequence[ i + 1 :]

となっていることから、sequenceのi+1番目から後ろの値がmに1回ずつ

与えられていって、sequenceの最後までいきます。

この文の読み方としては、nの値が初めに一つ入って、

mとnを比較していき、nの方が大きかった場合の数をカッコ内のsum()で求めて、

次のnの値も同様に...という感じです。

そして、後ろのループがすべて終了して初めて外側のsum()が動作して、

今まで数え上げてきた数が足し合わされて、合計の転倒数がわかるという仕組みです。

 

 Pythonをこれから始めたい方にオススメの本↓

Pythonスタートブック

Pythonスタートブック