5

これは、Wes Mckinney による Python for Data Analysis の 204 ページからのものです。

genre_iter = (set(x.split('|')) for x in movies.genres)
genres = sorted(set.union(*genre_iter))

%pasteこのコードは、IPython でメソッドを使用する場合に完全に機能します。このコードは、Python シェルで実行した場合にも完全に機能します。ただし、%pasteメソッドを使用せずに 2 行目を IPython に直接入力すると、

genres = sorted(set.union(*genre_iter))

次のエラーが表示されます

TypeError: descriptor 'union' of 'set' object needs an argument

私がまだ気づいていない IPython の機能がない限り、これはバグのようです。

4

1 に答える 1

13

発電機を使い果たしました。再度使用する前に再定義します。

genre_iter = (set(x.split('|')) for x in movies.genres)
genres = sorted(set.union(*genre_iter))

Python では、反復子のすべての要素をループすると、反復子を再度ループすることはできません (現在は空です)。

genre_iterイテレータが空であるため、引数を渡しset.union()いないため、次のように不平を言います。

>>> set.union()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: descriptor 'union' of 'set' object needs an argument

明確に言うと、ipython にバグは見つかりませんでした。通常の Python プロンプトで同じ問題を再現できます。

于 2013-02-06T02:08:55.293 に答える