[英]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
,并且不会打扰名称中的类型,除非它确实模棱两可。因此,您可能会有candidates
和multi_candidates
。绝对不要将任何东西称为“数组”,因为在其中有一个array
模块标准库做了一些不同的事情,通常不太有用。:))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.