0

私は Python で Flask フレームワークを使用しており、リストのリストをレンダラーに渡す必要があります。

ループを実行してリストを作成し、並べ替え、別のリストに追加してから、次のようにマスターリストを使用してレンダリング関数を呼び出します。

for itemID in itemsArray:
    avgQuantity = getJitaQuantity(itemID)
    lowestJitaSell = getJitaLowest(itemID)
    candidateArray = findLowestPrices(itemID, lowestJitaSell, candidateArray, avgQuantity)
    candidateArray.sort()
    multiCandidateArray.append(candidateArray)
renderPage(multiCandidateArray)

私の問題は、candidateArray をクリアして、ループのたびに新しいものを作成する必要があることですが、multiCandidateArray に追加する候補配列は、値そのものではなく、実際にはポインタであるように見えます。

私がこれを行うとき:

for itemID in itemsArray:
    avgQuantity = getJitaQuantity(itemID)
    lowestJitaSell = getJitaLowest(itemID)
    candidateArray = findLowestPrices(itemID, lowestJitaSell, candidateArray, avgQuantity)
    candidateArray.sort()
    multiCandidateArray.append(candidateArray)
    **del candidateArray[:]**
renderPage(multiCandidateArray)

私は価値がないことになります。

私が行方不明になっているこの状況を処理する方法はありますか?

4

2 に答える 2

0

私はおそらく次のようなものに行きます:

for itemID in itemsArray:
    avgQuantity = getJitaQuantity(itemID)
    lowestJitaSell = getJitaLowest(itemID)
    candidateArray = findLowestPrices(itemID, lowestJitaSell, candidateArray, avgQuantity)
    multiCandidateArray.append(sorted(candidateArray))

delここでは何もする必要はなくsorted、 new を返します。そのため、 が何らかの理由で同じリストへの参照を返すlist場合でも(これはありそうにありません)、 に一意のリストが残ります (ただし、一意のリストは への参照を保持できます)。同じオブジェクト)。FindLowestPricesmultiCandidateArray

于 2013-02-24T02:01:04.757 に答える
0

あなたのコードは、ループを通過するたびに新しいものをすでに作成しています。

candidateArray = findLowestPrices(...)

これにより、変数 に新しいリストが割り当てられますcandidateArray。それはうまくいくはずです。

これを行う場合:

del candidateArray[:]

...マスターリストに追加したのと同じリストの内容を削除しています。

ポインターや変数について考えないでください。オブジェクトについて考えてみてください。Python では暗黙的にコピーされるものは何もないことを思い出してください。リストはオブジェクトです。ループの最後で、candidateArrayと同じリスト オブジェクトに名前を付けますmultiCandidateArray[-1]。それらは同じものの異なる名前です。ループの次の実行では、によって生成される新しいリストcandidateArrayの名前になり、マスター リストの最後のリストは影響を受けません。findLowestPrices

これについては以前に書いたことがあります。変数をあらかじめ決められたメモリのブロックであると考える C の考え方は、Python にはまったく当てはまりません。値が一定数のバケットにコピーされるのではなく、名前が値に移動されます。

(また、つまらないことですが、Python コードは一般的にunder_scores、名前に型を使用し、それが本当にあいまいでない限り気にしません。そのためcandidates、 andがあるかもしれません。標準ライブラリにはモジュールがmulti_candidatesあるため、「配列」とは絶対に呼ばないでください。array何か違うことをし、一般的にあまり役に立たない. :))

于 2013-02-24T02:03:30.763 に答える