返品するとし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
なぜ 2 番目のケースで、結果はFalse
?
助けてください
ありがとう
代わりにこれを試してください。任意のサイズのリストで機能します。
all(e == a[0] for e in a)
最初の比較の後の累積値はであり、その時点から各要素と比較することになるため、を使用した提案されたソリューションreduce
は 2 つ以上の項目では機能しないことに注意してください。明らかにそれは機能しません。True
True
リストを減らしていません。ラムダの戻り値はTrue
orFalse
であり、同じラムダ関数をさらに呼び出すための入力パラメーターとして使用されます。したがって、ブール値とリストを比較することになります。したがって、縮小関数は、入力パラメーターと同じ型を返す必要があります。
おそらく、代わりに提案された他の回答を探していたでしょう: use all()
.
最初は [1,2,3] == [1, 2, 3] を比較し、次に True と [1,2,3] を比較すると true になるため、false になります。
助ける(減らす)
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)
するには、最初にto getsの最初の 2 つの要素で関数を評価します。次に、とを 2 つの引数として再度呼び出し、 の最終結果であるを取得します。reduce
operator.eq
a
True
operator.eq
True
range(1, 4)
False
reduce
おそらくあなたが望んでいる:
from functools import partial
import operator
allequal = reduce(partial(operator.eq, a[0]), a[1:])
2 番目のケースで結果が False になる理由
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