我希望得到列表的最小值與常數的比較。所以對於下面的我希望得到[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.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]
基本上什麼是最有效的方式來比較一個列表與常量?
嘗試下面的代碼。
分鐘(可迭代[,鍵]) 分鐘(ARG1,ARG2,* ARGS [,鍵])
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)
根據該Docs,
Re轉動可迭代中的最小項或兩個或更多個參數中的最小項。
這意味着它將始終返回兩個參數中最小的一個。 由於您正在比較不同類型,如int
和list
,結果不直觀。 Python根據字母順序來說明哪一個更大,所以INT比LIST小,因爲我按字母順序排列了L。 您可以通過在終端1 < [1,2]
鍵入這也將爲dict
S,tuples
等工作的檢查。
如果要將列表的最小數目與常數進行比較,可以通過執行min(min(list), constant)
或min(list+[constant])
來完成。
這種類型的錯誤是一個非常好的理由升級到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]
'分鐘(A + [1])'... –
我強調了預期的結果。你的命令只給了我0.5。我需要比較這兩個元素。 –