Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的列表列表列表_Python_List_Multidimensional Array - Fatal编程技术网

Python中的列表列表列表

Python中的列表列表列表,python,list,multidimensional-array,Python,List,Multidimensional Array,我正在使用Python中的Flask框架,需要将列表列表交给渲染器 我单步遍历一个循环,创建一个列表,对其排序,将其附加到另一个列表,然后使用主列表调用render函数,如下所示: for itemID in itemsArray: avgQuantity = getJitaQuantity(itemID) lowestJitaSell = getJitaLowest(itemID) candidateArray = findLowestPrices(itemID, lo

我正在使用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)
我最终没有价值观


有什么方法可以处理我所缺少的这种情况吗?

我可能会选择以下方法:

for itemID in itemsArray:
    avgQuantity = getJitaQuantity(itemID)
    lowestJitaSell = getJitaLowest(itemID)
    candidateArray = findLowestPrices(itemID, lowestJitaSell, candidateArray, avgQuantity)
    multiCandidateArray.append(sorted(candidateArray))
这里不需要
del
任何内容,并且
sorted
返回一个新的
列表
,因此即使
FindLowestPrices
出于某种原因返回对同一列表的引用(这不太可能),那么在
multiCandidateArray中仍然会有唯一的列表
(尽管您的唯一列表可能包含对相同对象的引用)。

您的代码已经在循环中每次都创建了一个新列表

candidateArray = findLowestPrices(...)
这将为变量分配一个新列表,
candidateArray
。它应该可以正常工作

执行此操作时:

del candidateArray[:]
…您正在删除刚刚附加到主列表的同一列表的内容

不要考虑指针或变量;只考虑对象,记住Python中没有任何东西是隐式复制的。列表是一个对象。在循环结束时,
candidateArray
将相同的列表对象命名为
multiCandidateArray[-1]
。它们是同一事物的不同名称。在循环的下一次运行中,
candidateArray
成为由
findLowestPrices
生成的新列表的名称,并且主列表末尾的列表不受影响

我曾经说过,C语言将变量视为预先确定的内存块的方式根本不适用于Python。名称被移动到值上,而不是将值复制到固定数量的存储桶中


(还有,吹毛求疵,但Python代码通常使用
下的分数
,除非名称中的类型真的不明确,否则不需要麻烦。因此,您可能有
候选项
多个候选项
。绝对不要将任何内容称为“数组”,因为标准库中有一个
数组
模块,它可以做一些不同的事情,通常不太有用。:)

这太完美了,非常感谢。用更少的行做我需要的。事实上,我收回了这一点——如果我运行两次列表,我会得到第一次运行到第二次的值——如果我运行三次,我会得到所有三个值。这些也是列表,而不是数组,使我的代码更加糟糕:]