転倒とは
転倒とは、自然な順番に並んでいない要素の配列のペアです。
転倒数とは
例えば、昇順で使うとしたら
[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をこれから始めたい方にオススメの本↓