最近我正在使用 python 来处理一些百万大小的列表。
这里我有一个列表E,它有 1,470,000 个元素,每个元素是一个包含 2 个整数的列表。
E 看起来像:[[1, 3], [2, 4], [4, 7] ... ]
我想分别获得第一列和第二列的最大数量。
我可以通过使用列表理解来获得它
m1 = max([e[0] for e in E])
m2 = max([e[1] for e in E])
return (m1, m2)
另一种方法是使用 zip:
list(map(max, zip(*E)))
乍一看,我认为第二种方式应该更快,因为列表理解将构建一个大列表(更重要的是,两次)。但事实证明列表理解非常快,使用 zip 的方法慢了大约 10 到 20 倍(使用 cProfile)。
我认为 zip 不应该那么慢,(更重要的是,列表理解怎么会那么快?)有人能告诉我原因吗?
我正在使用 python 3.2
PS通过使用Windows任务管理器,我什至看不到任何内存跟踪表明python曾经创建过一个新列表。一定有黑魔法。