Python sorted()实际上是否更改了正在排序的列表?

时间:2015-06-08 10:27:56

标签: python sorted

rat_nreads = sorted([(self.markers2lens[m],n) for m,n in self.markers2nreads.items()],key = lambda x: x[1])
rat_nreads, removed = [], []

我看到了这段代码,真的很困惑;如果要将rat_nreads分配给一个空列表,那么将self.markers2nreads.items()分配给排序列表有什么意义呢?第一行是否实际以任何方式改变了overflow: auto;

2 个答案:

答案 0 :(得分:5)

不,sorted会创建一个新列表。

所以你发布的代码没有意义。

  

第一行是否真的以任何方式改变了self.markers2nreads.items()

它无法改变,因为你有一个使用它的列表理解。

注意:

  • 将列表传递给sorted是没有意义的。 sorted(((self.markers2lens[m],n) for m,n in self.markers2nreads.items()),key = lambda x: x[1])效率更高 - 使用生成器,没有临时列表。
  • 您应该使用dict.iteritems(),因为dict.items()也会创建一个不需要的列表。

要对列表进行排序,需要这样做:

_list = [(self.markers2lens[m], n) for m, n in self.markers2nreads.iteritems()]
_list.sort(key=lambda x: x[1])

答案 1 :(得分:-1)

项目保留在内存中的相同位置,但会创建一个新列表:

protected void onPostExecute(String result){

   //Code for fragment A to show data in UI

   // code for showing fragment B
}

希望这会有所帮助..