列表与常量的最小值

时间:2015-10-10 04:25:36

标签: python list

我希望得到与常数相比较的最小列表。所以对于下面我希望得到[0.5,1]

In [1]: a=[0.5,2]

In [2]: min(a,1)
Out[2]: 1

我也不明白下面发生了什么。

In [3]: min(a,[1,1])
Out[3]: [0.5, 2]

基本上,将列表与常量进行比较的最有效方法是什么?

3 个答案:

答案 0 :(得分:1)

这种类型的错误是升级到Python 3的一个很好的理由,如果可以的话(你可能会)。对于排序列表和int没有定义的规则,因此Python 2应用了一个名为"仲裁但一致的规则" - 基本上,仅使用类型来定义顺序,并且不考虑两个对象的确切值。 Python 3将告诉你它不知道如何做到这一点,而不仅仅是给出一个奇怪的结果:

>>> min([0.5,2], 1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < list()

在任何情况下,似乎你想要的是与常量1进行元素明智的比较,以便获得结果列表。你可以用列表理解明确地得到它:

>>> a = [0.5, 2]
>>> [min(b,1) for b in a]
[0.5, 1]

答案 1 :(得分:0)

请尝试以下代码。

  

min(iterable [,key])   min(arg1,arg2,* args [,key])

Return the smallest item in an iterable or the smallest of two or more arguments.

https://docs.python.org/2/library/functions.html#min

min(min(a), 1)

答案 2 :(得分:0)

根据Docs

  

返回可迭代中的最小项或两个或多个参数中的最小项。

这意味着它将始终返回两个参数中最小的一个。 在比较不同类型时,例如intlist,结果并不直观。 Python按字母顺序表示哪一个更大,因此INT小于LIST,因为I&lt; L按字母顺序排列。 您可以通过在终端1 < [1,2]

中输入来检查

这也适用于dicttuples等等。

如果要将列表的最小数量与常量进行比较,可以通过执行min(min(list), constant)min(list+[constant])来实现。