質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
iteratorパターン

iteratorパターンとは、オブジェクト指向プログラミングのデザインパターンです。コンテナオブジェクトの要素を列挙する手段を独立させることによって、コンテナの内部仕様に依存しない反復子を提供することを目的とします。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1082閲覧

tupleのgeneratorはsetできるが、listのgeneratorはset出来ないのはなぜ?

kku6

総合スコア47

iteratorパターン

iteratorパターンとは、オブジェクト指向プログラミングのデザインパターンです。コンテナオブジェクトの要素を列挙する手段を独立させることによって、コンテナの内部仕様に依存しない反復子を提供することを目的とします。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

0クリップ

投稿2021/09/29 13:12

前提・実現したいこと

pythonの勉強をしているのですが、generatorの挙動でわからない部分があり、解説か、もしくは参考になりそうなサイトを教えていただけると嬉しいです。肝となるキーワードが何かわからず、自力で調べられずにおります。

実際のコード

def hoge1(): yield [1,2] yield [3,4] yield [5,6] def hoge2(): yield tuple([1,2]) yield tuple([3,4]) yield tuple([5,6]) set(hoge1()) set(hoge2())

について、以下のような結果になる。

# きちんと動く set(hoge2()) # ({(1, 2), (3, 4), (5, 6)}) set((tuple([1,2]), tuple([3,4]), tuple([5,6]))) set([1,2,3,4,5,6]) # エラーが出る set(hoge1()) # TypeError: unhashable type: 'list' set([[1,2,3,4,5,6]]) # TypeError: unhashable type: 'list'

hoge1()とhoge2()のtypeはそれぞれ<class 'generator'>で同じでした。
二次元構造のlistだとsetできていないようなのですが、なぜ出来ないのか、お詳しい方ご教示いただけますと嬉しいです。

supercox59👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ご質問のケースでのgeneratorはあまり関係ありません。それが返す要素の型の違いによります。
setの要素としては、エラー文のとおりハッシュ化できないものは要素にできないのが原因です。
それは以下のコードで確認できます。

Python

1print(set([(1,2),(3,4)])) # {(1, 2), (3, 4)} 2print(set([[1,2],[3,4]])) # TypeError: unhashable type: 'list'

tupleははハッシュ化できますがlistはできません。
そもそもこの違いについて知りたい場合はIn Python, why is a tuple hashable but not a list?を参照ください。

投稿2021/09/29 13:25

編集2021/09/29 13:34
can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問