• 受付
  • 困ってます

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

  • 質問No.9633614
  • 閲覧数31
  • ありがとう数2
  • 気になる数0
  • 回答数2

お礼率 49% (325/654)

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

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

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

回答 (全2件)

  • 回答No.2

ベストアンサー率 28% (1358/4778)

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

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

お礼率 49% (325/654)

回答ありがとうございました。どれが取り除かれるのか不明という仕様だというのもやや消極的ではありますが、解決と言えそうです。期待できないということで。面白いものだなと思いました。
投稿日時:2019/07/10 13:49
  • 回答No.1

ベストアンサー率 50% (1289/2547)

[技術者向] コンピューター カテゴリマスター
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はやったことがないので、
あくまで、予想でしかない回答ですが。
何かしら参考になれば!筋違いでしたらすいません。
お礼コメント
skmsk1941093

お礼率 49% (325/654)

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

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ