0

次のようなタプルのリストを言います:

y=[('a', 'b', 'c'),
 ('a', 'c', 'b'),
 ('b', 'a', 'c'),
 ('b', 'c', 'a'),
 ('c', 'a', 'b'),
 ('c', 'b', 'a')]

reduce() 機能を使用して、y の各要素の文字列を作成しようとしています。''.join(list(x) は、最初の反復で「abc」と言うことができます。

z=reduce(lambda x, u=dict(): u.setdefault(''.join(list(x)), []).extend(''.join(list(x))), y)

エラー:

AttributeError                            Traceback (most recent call last)
<ipython-input-102-79858e678e78> in <module>()
----> 1 z=reduce(lambda x, u=dict(): u.setdefault(''.join(list(x)), []).extend(''.join(list(x))), y)

<ipython-input-102-79858e678e78> in <lambda>(x, u)
----> 1 z=reduce(lambda x, u=dict(): u.setdefault(''.join(list(x)), []).extend(''.join(list(x))), y)

AttributeError: 'tuple' object has no attribute 'setdefault'
4

2 に答える 2

1

reduce()は常に2 つの引数で呼び出されるため、u引数は の 2 番目の値でyあるタプルに設定されます。デフォルトは無視されます。

ここは絶対に使ってはいけませんreduce()。ループの反復ごとに反復子の次のreduce()要素を使用して 1 つの集計値を計算する場合に必要です。

代わりにマッピングしています:

map(''.join, y)

またはリスト内包表記を使用します。

[''.join(x) for x in y]
于 2013-05-19T14:23:04.860 に答える