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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

609閲覧

python setについて

Gurt

総合スコア14

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/21 13:25

pythonを学んでるものなのですが、教本にてset型の説明のところで少し疑問に思ったことがあり、皆様の御助力賜りたいです。

set型はリスト型とは異なり重複した要素がなく要素自体に順番がないことは理解できました。しかし、実際の開発などでどのように利用するのか見当がつきません。リスト型からset型を作ることでリスト型の要素で重複したものを排除できるということはなんとなく使えそうだとは思うのですが、順番を保持できないということがどのように役立つのかわかりません。

自分自身pythonに触れ始めて間も無く、大きな開発や何か一つの物を作成したことはない為知識に乏しいことは重々承知ですが、どのような使用例があるのか教えていただけると幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

集合型はリストを用いて再現可能です。
その点では、ご指摘のとおり『順番を保持できない』ことは何の役にも立ちません。

集合の優位性は、特定の要素が含まれているか判定するとき操作が軽量であることです。

  • リストの場合

一般には順に頭から探すしか無いので、計算量が線型時間(リスト長に比例)になります。(註)

  • 集合の場合

特殊な形式で値を保持しているので、平均計算量は定数時間(一定)です。

もう少し詳しく知りたければ、ハッシュテーブルについて調べてみて下さい。

註: リストがソート済みの場合は、この限りではありません。


順番を保持できないということがどのように役立つのか

x 順番を保持できないことが役に立つ
o 計算量を優先した結果、順番を保持できなくなっている

投稿2019/06/21 13:53

編集2019/06/21 14:13
LouiS0616

総合スコア35658

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

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

Gurt

2019/06/21 14:33

解答ありがとうございます。 まだなんとなくではありますが質問以前よりはイメージがつくような感じがします。 プロフィールを拝見させていただいたのですが、プログラムを職業とされていないとのことでしたがどのように知識を身につけたのでしょうか。
LouiS0616

2019/06/22 02:58

うーん、それは答えづらい質問ですね。 何か特訓して身に付けたわけでは無いですので... 強いて言うなら、 ・ 複数のプログラミング言語に触れた ・ コミュニティに参加して新しい知識を得た/自分の知識を確かめた ・ とにかくたくさん書いた この辺りですかね。 複数のプログラミング言語に触れた --- 学んだ言語/触れた言語はこんな感じです。 0. BASIC (触れただけ。書けない。) 0. C 0. Java 0. LISP (触れただけ。書けない。) 0. Prolog (触れただけ。書けない。全く理解できなかった。) 0. C++ 0. VBA (ちょっと書いただけ。) 0. Python 0. brainf*ck (理解はしているけど書けない。) 0. JavaScript (ちょっと書いただけ。) 0. VimScript (ちょっと書いただけ。) 0. Haskell (勉強中) 言語それぞれ思想が違いますから、異なった観点でプログラミングに再入門することができます。 関数型言語を勧める人は多いですね。 コミュニティに参加して新しい知識を得た/自分の知識を確かめた --- 主にteratailとQiitaです。 他の方の投稿を見て、知らない単語や概念は入念に調べました。 また回答者として積極的に参加するようになってからは、仕様を逐一確認する癖ができました。 スコアが無駄に伸びてしまって、マサカリが気軽に飛んでこなくなったのが悩みです。 とにかくたくさん書いた --- 文字どおり。 新しく知ったものは積極的に使っています。
LouiS0616

2019/06/22 03:02

私は持っていないですが、基本情報技術者試験の勉強をするのも体系的な知識を得るためには有効だとも聞きます。
guest

0

  • 集合演算を前提としているときは、重複なし、順番なしの性質で構わない訳です。2つのイテラブルから重複する要素だけを取り出したりとか(&でできます)。集合型を使わないで書くのは大変ですし、遅くなります。
  • また、集合型は探索が高速です。たとえばlst = ["私", "は", "雀", "だ"]から私と雀だけ取り出すという処理を書きたいときは、下のようにします。

python

1stop_words = {"は", "だ"} # ここは集合にして、かつループ外で定義する 2result = [x for x in lst if x not in lst]
  • 辞書のキーなどとして使えるfrozensetも便利です。たとえば("a", "b")("b", "a")は順番を問わず同じものとして扱って辞書のキーにしたいというシチュエーションがたまにあります。frozensetを使わないとかなり書くのが難しいと思います。

投稿2019/06/22 03:35

hayataka2049

総合スコア30933

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

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

Gurt

2019/06/22 08:32

解答ありがとうございます。探索の高速化には欠かせないのですね。set型をそのまま使うというよりは演算用になるという感じですかね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問