我有两个列表,如下:
l_one = [2,5,7,9,3]
l_two = [4,6,9,11,4]
我需要从两个列表中找到最小值和最大值。也就是说,我想要生成一个单一的最小值和一个单一的最大值。
我的问题是 - 最pythonic的实现方式是什么?
非常感谢任何帮助。
可以说最易读的方法是
max(l_one + l_two)
或者min(l_one + l_two)
然而,l_one + l_two
会创建一个新的列表并将其复制。如需避免复制,可以这样做:
max(max(l_one), max(l_two))
min(min(l_one), min(l_two))
max(l_one + l_two)
比 max(max(l_one), max(l_two))
更快。谢谢Sven。 - Georgel_one
和l_two
中所有引用的副本。这一步需要与列表长度成比例的一些时间。第二种形式不需要复制,因此速度更快。(它必须调用max()
三次,但对于非常短的列表,它甚至可能稍微慢一些,但对于非常短的列表,速度无论如何都不重要。) - Sven Marnach另一种避免复制列表的方法
>>> l_one = [2,5,7,9,3]
>>> l_two = [4,6,9,11,4]
>>>
>>> from itertools import chain
>>> max(chain(l_one, l_two))
11
>>> min(chain(l_one, l_two))
2
import numpy as np
i1=np.array(range(5))
i2=np.array(range(4))
i3=np.array(range(-5,5))
np.min(np.concatenate([i1,i2,i3]))
min(min([i1,i2,i3]))
does not produce the wanted result.
min(min([10,2,3], [4,5], [10]))
gives 4
as output, whereas the sought minimum is 2
- AndreasT>>> l_one = [2,5,7,9,3]
>>> l_two = [4,6,9,11,4]
>>> min(l_one + l_two)
2
>>> max(l_one + l_two)
11
from numpy import maximum
result = maximum(l_one,l_two)