在python中的对列表中找到最小x和y值的最佳方法?

Ben*_*ngo 1 python performance list

给出一个数据列表:

[[0, 0], [1, 0], [0, 1], [-1, 0], [0, -1], [1, -1], [2, 0], [1, 1], [0, 2]]
Run Code Online (Sandbox Code Playgroud)

在python中获得最低X和Y的最快方法是什么.在这种情况下[-1,-1].

tob*_*s_k 6

不确定它是最快的,但它可能是最短和最"pythonic":

>>> map(min, zip(*data))
[-1, -1]
Run Code Online (Sandbox Code Playgroud)

更新:我也使用10000个随机子列表和100次迭代的列表对此进行了一些时序分析.事实证明它比Aशwiniitemgetter解决方案快一点,但普通的for循环仍然是最快的:

0.400840   min_mapminzip
0.579334   min_itemgetter
0.292459   min_loop
Run Code Online (Sandbox Code Playgroud)

这是为Python 2.x的...与Python 3,在那里zip,map等都是迭代器,又是另一回事:

0.186229   min_mapminzip   # wrong result, see below
0.686008   min_itemgetter
0.336031   min_loop
Run Code Online (Sandbox Code Playgroud)

更正:我忘了listmap迭代器的情况下应用,从而创建迭代器但没有做任何实际的工作......感谢gnibblerAशwini指出这个!有了list(map(...)),执行时间与Python 2.x几乎相同,即普通旧循环仍然是最快的.


更新2:有趣的是,"map-min-zip"解决方案仅对相对较短的列表更快 - "短",大约10,000个项目.对于更长的列表,大约100,000或更多,"itemgetter"解决方案变得更快.平原for循环总是最快的...