Python sorted ()是否真的改变被排序的列表?

2024-09-27 19:18:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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()?在


Tags: lambdakey代码inself列表for排序
2条回答

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

a = [1, 0, 2]
a1 = id(a[0])

b = sorted(a)
b1 = id(b[1])

print a1 == b1
>>>True

希望这有帮助。。在

否,sorted创建一个新列表。在

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

Does the first line actually change self.markers2nreads.items() in any way?

它不能改变,因为你有一个列表理解来使用它。在

注意事项:

  • 将列表传递给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])

相关问题 更多 >

    热门问题