给定一个数据列表:
[[0, 0], [1, 0], [0, 1], [-1, 0], [0, -1], [1, -1], [2, 0], [1, 1], [0, 2]]
在 python 中获得最低 X 和 Y 的最快方法是什么? 在这种情况下 [-1,-1]。
请您参考如下方法:
不确定它是不是最快的,但它可能是最短且最“pythonic”的:
>>> map(min, zip(*data))
[-1, -1]
更新:我也对此做了一些时序分析,使用了 10000 个随机子列表和 100 次迭代的列表。事实证明它比 Aशwini 的 itemgetter 解决方案快一点,但普通的 for 循环仍然是最快的:
0.400840 min_mapminzip
0.579334 min_itemgetter
0.292459 min_loop
那是针对 Python 2.x 的……对于 Python 3,其中 zip、map 等是迭代器,这是另一回事了:
0.186229 min_mapminzip # wrong result, see below
0.686008 min_itemgetter
0.336031 min_loop
更正:我忘记在 map 是迭代器的情况下应用 list,因此创建了迭代器但没有做任何实际工作... 感谢 gnibbler 和 Aशwini 指出这一点!使用 list(map(...)),执行时间与 Python 2.x 几乎相同,即普通的旧循环仍然是最快的。
更新 2: 有趣的是,“map-min-zip”解决方案仅对相对较短的列表更快——“短”的列表大约有 10,000 个。对于更长的列表,大约 100,000 或更多,“itemgetter”解决方案变得更快。普通的 for 循环总是最快的...
