2017-01-16 3 views
0

リスト内の要素の数を数えるには、reduce関数を使う必要があります。ベルリンからpython - reduce()関数を使ったリストの長さ

TypeError: <lambda>() takes 1 positional argument but 2 were given 

ご挨拶:私は、次のエラーメッセージが表示されます。このいずれかで

def lenReduce(L): 
    return reduce(lambda x: x + 1, L) 

。 ;-)

答えて

1

reduceの関数引数は、前の呼び出しの戻り値とリストの項目の2つの引数をとります。この場合

def counter(count, item): 
    return count + 1 

、あなたは本当にitemの値が何であるかを気にしません。単にcounterにそれを渡すことは

def lenReduce(L): 
    return reduce(lambda count, item: count + 1, L) 

にもかかわらずあなた関数は第二引数を無視し、あなたがlambda式を使用して、現在のカウンタの値に1を加え

def lenReduce(L): 
    return reduce(counter, L) 

かを返すようにしたいことreduceはまだそれを関数に渡すことができると予想しているので、2つの引数をとるように定義する必要があります。

0

lenReduce([5,3,1])

戻り、これはラムダ関数は、最初の2 elemetsある3に設定されている5itemに、countが設定されて呼び出される非常に最初の時間のために、ある意味何7

リスト。ラムダ関数の次の呼び出しから、countがインクリメントされます。したがって、解決策は機能しません。

解決策は、リストの最初の要素ではなく、選択した値にカウントを設定することです。これを行うには、3つの引数を指定してreduceを呼び出します。低減の上記コールで

def lenReduce(L): 
    return reduce(lambda count, item: count + 1, L, 0) 

count0に設定され、項目は各反復のインデックス0から始まるリストの要素に設定されます。

lenReduce([3,2,1]) 出力3が望ましい結果です。

関連する問題