1. ホーム
  2. python

[解決済み] TypeErrorです。初期値なしの空シーケンスのReduce()

2022-02-24 09:02:55

質問

現在、0インデックスがそのファイルの行数で、1インデックスがそのファイルの文字数であるタプルを与える関数を書こうとしています。今のところ、次のようなタプルのリストを持っています。

mapped = [(1, 50), (1, 11), (1, 58)]

私が書こうとしているのは、このような行です。

reduce(lambda x:(x[0]+y[0], x[1]+y[1]),(i for i in mapped))

正しく動作するならば、(3, 119)のタプルが返されるはずです。しかし、次のようなエラーが発生します。

TypeError: reduce() of empty sequence with no initial value

なぜそうなるのか、どなたかおわかりになる方はいらっしゃいますか?

どのように解決するのですか?

このように使用します。

>>> reduce(lambda x,y:(x[0]+y[0], x[1]+y[1]),[i for i in mapped])
(3, 119)
>>> reduce(lambda x,y:(x[0]+y[0], x[1]+y[1]),(i for i in mapped))
(3, 119)

あなたが見逃しているのは lambda は2つのパラメータを取るべきですが、あなたは1つだけ与えてください。

Python3.xの場合、以下のコードを参照してください。

>>> from functools import reduce
>>> reduce(lambda x:(x[0]+y[0], x[1]+y[1]),(i for i in mapped))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 1 positional argument (2 given)
>>> reduce(lambda x,y:(x[0]+y[0], x[1]+y[1]),(i for i in mapped))
(3, 119)