一回も披露したことのない豆知識

いみわかんないです。リストはset()にいれちゃいけないっていってるひとと入れてる人がいます。どっちがほんとですか??
パイソンです。

A 回答 (3件)

質問の意味が良く分かりませんが



s = set([1,2,3)])

は問題なく出来るけど

s = set()
s.add([1,2,3])

は出来ない。pythonはエラーを吐きます。

リストはハッシュ不能だから、集合の要素にはなれない。
    • good
    • 0

pythonではset()は①重複した要素がない②要素に順番がないという特徴があります。



myset1 = set([1,2,3])
myset2 = set([1,2,3,3,2,1])
print(myset1)
print(myset2)
実行結果
{1, 2, 3}
{1, 2, 3}
list型をset型に入れるとどうなるでしょうか。

mylist = [11, 1, 3, 5, 3, 6, 7, 8, 9, 23, 23, 5]
myset = set(mylist)
print(myset)
結果
{1, 3, 5, 6, 7, 8, 9, 11, 23}
重複要素は消えてしまいます。順番も変わってしまいます。
このようなことが起こるので、こういうことをやるためにやるのでなければ、やらない方が安全です。ソーステキストを追いかけても不具合に気付きにくいです。
    • good
    • 0

Pythonのオブジェクトには「ハッシュ可能」かどうか、という属性があります。



https://docs.python.org/ja/3/glossary.html#term- …
> (リストや辞書のような) ミュータブルなコンテナはハッシュ不可能です。

set には、ハッシュ可能なオブジェクトしか納めることができません。
https://docs.python.org/ja/3/library/stdtypes.ht …
> et オブジェクトは、固有の hashable オブジェクトの順序なしコレクションです。


リストはハッシュ不可能なので、setには入れられません。


ハッシュ可能/不可能
ミュータブル/イミュータブル
といった言葉は、重要なので、じっくり勉強してください。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!