假設a = [[1,2,3],[1,2,3]]
reduce(lambda x,y: x==y, a)
回報True
蟒蛇減少,以檢查是否所有元素都是平等
但如果a = [[1,2,3],[1,2,3],[1,2,3]]
reduce(lambda x,y: x==y, a)
回報False
爲什麼在第二種情況下,結果是False
?
請幫助
感謝
假設a = [[1,2,3],[1,2,3]]
reduce(lambda x,y: x==y, a)
回報True
蟒蛇減少,以檢查是否所有元素都是平等
但如果a = [[1,2,3],[1,2,3],[1,2,3]]
reduce(lambda x,y: x==y, a)
回報False
爲什麼在第二種情況下,結果是False
?
請幫助
感謝
試試這個,它適用於任何規模的名單:你提出的解決方案使用reduce
兩個以上的項目不起作用
all(e == a[0] for e in a)
公告,因爲第一次比較後的累計值是True
,您將比較True
與此時的每個元素,顯然這不起作用。
你是不是減少列表。您的lambda的返回值是True
或False
,然後將其用作輸入參數以進一步調用相同的lambda函數。所以你最終將一個布爾值與一個列表進行比較。因此,縮減功能應該返回與輸入參數相同的類型。
您可能正在尋找其他答案,而不是使用:使用all()
。
由於第一次減少比較[1,2,3] == [1,2,3],並且下一次它比較真和[1,2,3]並且它是假的。
幫助(減少)
Help on built-in function reduce in module __builtin__:
reduce(...)
reduce(function, sequence[, initial]) -> value
Apply a function of two arguments cumulatively to the items of a sequence,
from left to right, so as to reduce the sequence to a single value.
For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
((((1+2)+3)+4)+5).
a = [range(1, 4), range(1, 4), range(1, 4)]
評價reduce(operator.eq, a)
的reduce
功能將首先對FIR評估功能operator.eq
st a
的兩個元素獲得True
。然後再以True
和range(1, 4)
作爲兩個參數再次調用operator.eq
,得到False
,這是reduce
的最終結果。
也許你是想:
from functools import partial
import operator
allequal = reduce(partial(operator.eq, a[0]), a[1:])
爲什麼在第二種情況下,結果是假
因爲reduce(lambda x, y: x == y, (a, b, c, d))
並不意味着(a == b) and (b == c) and (c == d)
;這意味着(((a == b) == c) == d)
。 a == b
將產生True
或False
,然後將其與c
比較。
當然。其實我正在做簡單的'a [1:] == a [: - 1]'它的工作原理,但我的問題是爲什麼'reduce'會產生意外的結果,如我的問題所示? – Jack
@傑克不,這不是你在做什麼。看到我編輯的答案。 –
它也適用於空列表。 –