Python:我创建了2个列表,我对它们中的一个进行排序,它们都被排序

时间:2015-03-06 17:14:49

标签: python list sorting

我有一个名为self.nodePathList的列表,其中包含[782,455,231]。然后我将它放入另一个列表变量:self.sortedNodePath = self.nodePathList。这两个列表现在包含相同的内容。我排序self.sortedNodePath。然而,他们都被分类了。我一遍又一遍地检查代码,但我没有做出任何拼写错误或使用错误的名称。如果你想使用它,代码如下

self.sortedNodePath = self.nodePathList

#######sorting

for passnum in range(len(self.sortedNodePath)-1,0,-1):
    for i in range(passnum):
           if self.sortedNodePath[i]>self.sortedNodePath[i+1]:
                  self.temp = self.sortedNodePath[i]
                  self.sortedNodePath[i] = self.sortedNodePath[i+1]
                  self.sortedNodePath[i+1] = self.temp

#######END OF SORTING

3 个答案:

答案 0 :(得分:3)

在您的示例中,self.sortedNodePathself.nodePathList都指向同一个对象。当您对该对象进行排序时,两个变量仍指向它。

您需要使用以下方法创建新对象:

self.sortedNodePath = list(self.nodePathList)

举个例子:

foo = ['test', 'foo']
bar = foo

print id(foo)
>>> 23367192

print id(bar)
>>> 23367192   # You can see both foo and bar have the same object ID

bar = list(foo)

print id(bar)
>>> 23387392  # Now using list(), bar has a separate object ID from foo

答案 1 :(得分:0)

您没有创建两个列表,而是创建了对同一列表的两个引用。

答案 2 :(得分:0)

如果您使用print id(self.sortedNodePath)print id(self.NodePathList)检查这两个列表对象的ID,您会发现它们实际上都是相同的列表。

制作真实副本:

 self.sortedNodePath = []
 self.sortedNodePath.extend(self.nodePathList)

另外,请注意,在Python中,通常会使用sorted(list)list.sort()对列表进行排序。如果列表中的项不是Python知道如何比较的简单类型,则可以为sorted()list.sort()提供一个函数,用于为列表中的每个对象提取比较值