2015-10-10 21 views
1

我希望得到列表的最小值與常數的比較。所以對於下面的我希望得到[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] 

基本上什麼是最有效的方式來比較一個列表與常量?

+1

'分鐘(A + [1])'... –

+0

我強調了預期的結果。你的命令只給了我0.5。我需要比較這兩個元素。 –

回答

0

根據該Docs

Re轉動可迭代中的最小項或兩個或更多個參數中的最小項。

這意味着它將始終返回兩個參數中最小的一個。 由於您正在比較不同類型,如intlist,結果不直觀。 Python根據字母順序來說明哪一個更大,所以INT比LIST小,因爲我按字母順序排列了L。 您可以通過在終端1 < [1,2]

鍵入這也將爲dict S,tuples等工作的檢查。

如果要將列表的最小數目與常數進行比較,可以通過執行min(min(list), constant)min(list+[constant])來完成。

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]