簡體   English   中英

Python中列表列表的列表

[英]A list of lists of lists in Python

我正在使用Python中的Flask框架,需要將列表列表傳遞給渲染器。

我遍歷一個循環並創建一個列表,對其進行排序,將其追加到另一個列表,然后使用主列表調用render函數,如下所示:

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

我的問題是,每次循環時我都需要清除候選數組並創建一個新數組,但是看起來我附加到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)

我最終沒有價值。

有什么辦法可以解決我所缺少的這種情況?

我可能會喜歡這樣的東西:

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

無需在此處del任何內容,並且sorted返回一個新list ,因此,即使因為某種原因FindLowestPrices返回對同一列表的引用(這不太可能),但在multiCandidateArray仍然會有唯一列表(盡管唯一列表)可以包含對相同對象的引用)。

您的代碼每次循環都已經創建了一個新代碼。

candidateArray = findLowestPrices(...)

這會將新列表分配給變量candidateArray數組。 它應該工作正常。

執行此操作時:

del candidateArray[:]

...您正在刪除剛添加到主列表的同一列表的內容。

不要考慮指針或變量; 只考慮對象,切記Python中沒有任何內容被隱式復制。 列表是一個對象。 在循環結束時, candidateArray數組與multiCandidateArray[-1]命名相同的列表對象。 它們是同一事物的不同名稱 在下一個循環中, candidateArray數組將成為由findLowestPrices生成的列表的名稱,並且主列表末尾的列表不受影響。

我以前已經寫過這本書 ; 將變量視為預定的內存塊的C語言方式根本不適用於Python。 名稱會移到值上,而不是將值復制到固定數量的存儲桶中。

(此外,挑剔,但是Python代碼通常使用under_scores ,並且不會打擾名稱中的類型,除非它確實模棱兩可。因此,您可能會有candidatesmulti_candidates 。絕對不要將任何東西稱為“數組”,因為在其中有一個array模塊標准庫做了一些不同的事情,通常不太有用。:))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM