繁体   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