reduce でリストの重複有無をチェックする

高階関数 functools.reduce(function, sequence, initial=None) は、
リストの存在チェック in Iterable の代用に書けますが、
わざわざ in Iterable の代わりに以下のように書くことはありません。

from functools import reduce

list = ['a','b','c','d','e']
sts = reduce(lambda r,t:r or t=='c', list, False)

しかし、リストの要素が重複がないユニークであるか否かをチェックするのに
使うことができます。

それには、Java と違ってリスト追加の append メソッドが戻り値として
何も返さないという欠点を念頭におかなければなりません。
さらに、Pythonのラムダは複数行の処理を書くようになってないので、無理やり配列orタプルで
実行するように書いて、

addList = lambda b,a:(b in a, a.append(b))[0]
status = addList('d', list)

この status は、True です。
これを踏まえて以下のように
reduce のイニシャライザに、(False, []) というタプルを指定することで、

if reduce(lambda r,t:(r[0] or addList(t, r[1]), r[1]), list, (False, []))[0]:
    print('重複あり')
else:
    print('重複なし')

と、addList = lambda b,a:(b in a, a.append(b))[0] を使用して書けます。

この addList lambda を宣言せずに記述できるわけで、

if reduce(lambda r,t:(r[0] or (t in r[1], r[1].append(t))[0], r[1]), list, (False, []))[0]:
    print('重複あり')
else:
    print('重複なし')

全て同じは、

if len(set(list)) == 1:
       print('全て同じ')

全てユニークは、

if len(list)==len(set(list)):
    print('全てユニーク')

と、書けるのだけれども、、
無理やりに reduce() で書くと、、

if reduce(lambda r, t:((r[1].append(t), r[1].count(t))[1], r[1]), list, (0, []))[0]==len(list):
    print('全て同一要素である')
else:
    print('全て同一要素でない')

if reduce(lambda r, t:(r[0] and (r[1].append(t), r[1].count(t)==1)[1], r[1]), list, (True, []))[0]:
    print('全てユニーク')
else:
    print('重複あり')