我希望得到与常数相比较的最小列表。所以对于下面我希望得到[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]
基本上,将列表与常量进行比较的最有效方法是什么?
答案 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,
返回可迭代中的最小项或两个或多个参数中的最小项。
这意味着它将始终返回两个参数中最小的一个。
在比较不同类型时,例如int
和list
,结果并不直观。 Python按字母顺序表示哪一个更大,因此INT小于LIST,因为I&lt; L按字母顺序排列。
您可以通过在终端1 < [1,2]
这也适用于dict
,tuples
等等。
如果要将列表的最小数量与常量进行比较,可以通过执行min(min(list), constant)
或min(list+[constant])
来实现。