0

いくつかのことに取り組んでいると、理解できないという奇妙な問題に遭遇しました。10,000 個の値を持つリストを 2 つの方法で並べ替えています。1 つはクイック選択を使用し、もう 1 つは挿入並べ替えを使用します。これの目標は、中央値を見つけることであり、その中央値を使用して、中央値とすべての値の間の合計距離を見つける必要があります。中央値の計算は完全に正常に機能しますが、合計の計算では、理解できない理由で異なる値が返されます。合計を計算する関数への入力は、リストと中央値です。中央値は両方のプログラム間で同じままであり、リストの値も同じですが、リストの 1 つが並べ替えられ、もう 1 つのリストは並べ替えられていません。

これが合計を計算するために使用しているものです(これのフォーマットは問題なく、ここにコピーするだけです)...

def ttlDist(lst, med):
    total = 0
    for i in lst:
        total = abs(med - i)
    print(total)

あるリストがソートされていて、別のリストがソートされていない場合、なぜ劇的に異なる値が得られるのでしょうか? 参考までに、挿入ソートを使用した場合の距離は 49846.0 ですが、クイック選択を使用した場合の距離は 29982 です。

4

1 に答える 1

1

あなたは何も蓄積していません。totalループを通過するたびに新しい値に置き換えています。したがって、ループの最後ではtotal、 の最後の要素の値ですlst。ソートされたリストとソートされていないリストは、通常、最後の要素が異なります。

おそらくあなたが望んでいたのは:

total += abs(med - i)

または、より単純に、関数全体を次のように置き換えます。

total = sum(abs(med-i) for i in lst)
于 2013-10-08T21:02:59.440 に答える