こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

pythonの集合に対するpop()操作

pythonの文字列の集合nameについてpop()を実行しました。

name={"bojyo","arai","araki","yamada","tanaka"}
item=name.pop()

この場合、itemが最後の要素の"tanaka"となり、ということは最後の要素が取り除かれるということかと思ったらそうではありませんでした。解説書には”最後の要素が取り除かれるわけではない”と書いてあり、じゃあどういう風に取り除かれるかという記載がありません。
実際にpop()を繰り返して1つづつ抜いていくときにどの要素が選ばれるのかパターンがわかりませんでした。アルファベティカルというわけでもないようです。どのような取り決めで除かれていくのでしょうか。

投稿日時 - 2019-07-09 17:36:05

QNo.9633614

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

表記上"tanaka"が最後の要素に見えますが
pythonの集合(set)は要素に順序付けのないただの集合です。
ですのでpop()で要素の取り除かれる順番に規則性を期待してはいけません。

あえていうならpythonの実装コードがルールです(なのでバージョンアップ等で実装が変われば変わります)。

投稿日時 - 2019-07-09 20:34:48

お礼

回答ありがとうございました。どれが取り除かれるのか不明という仕様だというのもやや消極的ではありますが、解決と言えそうです。期待できないということで。面白いものだなと思いました。

投稿日時 - 2019-07-10 13:49:36

pythonは、まだやったことがないのですが、説明を見てみたのですが。
https://note.nkmk.me/python-list-clear-pop-remove-del/

>最後の要素が取り除かれるということかと思ったらそうではありませんでした
この否定文章の、矛盾はもしかして、
「位置指定をすればその位置を削除するから」
という意味ではないでしょうか。
name={"bojyo","arai","araki","yamada","tanaka"}
item=name.pop(3)
なら、3番目の、yamadaがitemに入り、tanakaが1段せりあがるため。
ってことではないでしょうか・・・
たしかに、最後の1つが消えたわけじゃないですしね。
質問の意図は満たしているかもしれません。

ただ、私のほう、pythonはやったことがないので、
あくまで、予想でしかない回答ですが。
何かしら参考になれば!筋違いでしたらすいません。

投稿日時 - 2019-07-09 19:26:38

お礼

回答ありがとうございます。考えてみると、この集合というのは、pythonではリスト、タプル、そして集合という似たような概念の1つですが、特に集合に関してはナンバリングされていないというものなので何が最後で何が最初なのかわからない、乱数のようなもので決めているのではないかと思います。コンピュータですからすべて手続き依存だと思いますが、乱数で決めていると思うと、何も期待できないわけですね。じゃあ、何のためにあるのかと聞きたくなります。面白い言語だと思います。他の言語は似たりよったり(お互い翻訳可能)ですが、これくらい飛躍があると新しい展開でも望めそうです。juliaだともっと面白いかもですが。

投稿日時 - 2019-07-10 13:58:56