Python中的列表列表

2024-04-19 11:54:54 发布

您现在位置: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)

我的问题是每次通过循环时都需要清除candidateArray并创建一个新的candidateArray,但看起来我附加到multiCandidateArray的candidateArray实际上是一个指针,而不是值本身。你知道吗

当我这样做时:

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)

我最终没有价值观。你知道吗

有没有办法处理我所缺少的这种情况?你知道吗


Tags: in列表forsortappenditemidmulticandidatearraygetjitaquantity
2条回答

我可能会说:

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生成的列表的名称,并且主列表末尾的列表不受影响。你知道吗

我已经written about this before;将变量看作预先确定的内存块的C方式根本不适用于Python。名称被移到值上,而不是将值复制到固定数量的存储桶中。你知道吗

(还有,吹毛求疵,但是Python代码通常使用under_scores,并且不需要处理名称中的类型,除非它真的很模糊。所以你可能有candidatesmulti_candidates。绝对不要将任何东西称为“array”,因为标准库中有一个array模块,它做了一些不同的事情,通常不太有用。:))

相关问题 更多 >