私は初めのpythonコーダーではありませんが、私は先進的なコーナーでもありません。私が何を記述しているかを見ることができれば、問題は説明しやすくなります。ここに問題を見ているコードがあります:Mergesortはもはや返さない
import operator
def mergeSort(L, compare = operator.lt):
if len(L) < 2:
return L[:]
else:
middle = int(len(L)/2)
left = mergeSort(L[:middle], compare)
right = mergeSort(L[middle:], compare)
return merge(left, right, compare)
def merge(left, right, compare):
result = []
i,j = 0, 0
while i < len(left) and j < len(right):
if compare(left[i], right[j]):
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
while (i < len(left)):
result.append(left[i])
i += 1
while (j < len(right)):
result.append(right[j])
j += 1
return result
マージ機能が動作します。最終的な返品結果は常に整っています。問題は、mergesortのreturn merge(left、right、compare)に戻り、最終的な戻り結果から一歩前進した場合、返されたリストLはもはや整っておらず、このひどく順序付けられたリストはmergesortを呼び出した関数。なぜこれが起こっているのかわかりません。リターン結果からリターンマージ(左、右、比較)までの復帰旅行で何が起こる可能性がありますか?返されるリストはランダム化されたリストではなく、部分的にソートされたリストのように見えますが、最終的な返り値で完全にソートされました。この結果はmergesortに返されたものではありません。
以前はこのmergesortを問題なく使用していましたので、ソートしているデータに問題がある可能性があります。 Lはリストのリストであり、各リスト要素は、csvに、そして最終的にはExcelにエクスポートされる文字列、すべて同じ長さのリストです。私のデータは、最初の列にはウェブサイトのタイトルを、2番目の列にはURLを持つテーブルです。重複を識別するためにそれらを並べ替えています。完成したテーブルにはいくつかのフィールドがありますが、タイトルとURLの列だけでこの問題を見ることができます。これは簡略化されたものなので、何がうまくいかないかを調べることができます。私は、mergesortがこのデータ構造を扱うことができないかどうかは確かではありませんでしたが、マージの最終結果は確かに可能であることを示しています。しかし、最終的なリターンでは何か不思議なことが起こります。
いくつかの種類のデータに問題がある場合は、問題のサンプルデータを追加して、誰もがそれを実行して問題を参照できるようにします。 – furas
ファイルを投稿に添付する方法はありますか?これが起こるのを見るには、かなりの数の行のデータが必要です。私は自分の投稿にデータの説明を追加しました – dmars