2012-04-04 57 views
9

的最小和最大我有两个列表,如:Python中找到两个列表

l_one = [2,5,7,9,3] 
l_two = [4,6,9,11,4] 

...我需要找到两个清单合并最小和最大值。也就是说,我想生成一个最小值和一个最大值。

我的问题是 - 什么是达到这个最pythonic方式?

任何帮助非常感谢。

+1

这应该被标记为家庭作业吗? – 2012-04-04 14:08:35

回答

25

可以说是最可读的方式是

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)) 
+0

因此,第一个将复制列表并找出格言(在内存上更昂贵)。但第二种方法呢,是否需要更长时间的速度呢? – George 2012-04-04 14:24:33

+0

@George:不,它也更快。唯一的缺点是它不像第一个那样好看。 – 2012-04-04 14:25:43

+0

你能解释一下,或给我提供资源,这样我就可以了解它背后的原因了吗?我应该问这是一个新问题吗?或者这是非常微不足道的/取决于实施。 – George 2012-04-04 14:44:57

1

您可以将它们组合起来,然后调用最小或最大:

>>> 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 
10

的另一种方法是避免复制列表

>>> 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 
1

,如果你只是有像你这样的列表,即使有不同大小的列表,它也能正常工作:

min(min([i1,i2,i3])) 

你甚至可以有一个更聪明的解决方案,它以不同numpy的阵列的工作原理:

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])) 
0

如果你想选择两个lists.I的最大值或最小值觉得下面的工作:

from numpy import maximum 
result = maximum(l_one,l_two) 

比较这两个列表中的每个元素后,它将返回一个最大值。