18

我有两个列表,例如:

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

...我需要从两个列表的组合中找到最小值和最大值。也就是说,我想生成一个最小值和一个最大值。

我的问题是 - 实现这一目标的最 Pythonic 方式是什么?

非常感谢任何帮助。

4

5 回答 5

43

可以说,最易读的方式是

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))
于 2012-04-04T14:08:48.210 回答
16

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

>>> 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
于 2012-04-04T14:12:23.960 回答
3

(修改感谢 AndreasT 评论。删除了“min(min())”解决方案)

您甚至可能有一个更智能的解决方案,它适用于不同的 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]))
于 2015-01-09T14:04:19.197 回答
3

您可以将它们组合起来,然后调用 min 或 max:

>>> 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
于 2012-04-04T14:09:10.780 回答
1

如果要从两个列表中选择最大值或最小值。我认为以下方法可行:

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

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

于 2017-11-24T01:12:11.710 回答