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

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

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

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

Q&A

解決済

1回答

956閲覧

pythonのsetについて

tokatoka

総合スコア7

Python 3.x

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

0グッド

0クリップ

投稿2016/06/21 11:44

編集2016/06/21 12:16

###前提・実現したいこと
幾つかのグラフ上の点が連結しているかどうかを示すサンプルコードです。
例えば、
networkに
"dr101-mr99", "mr99-out00", "dr101-out00", "scout1-scout2","scout3-scout1", "scout1-scout4", "scout4-sscout", "sscout-super"

などのように名前を持つグラフの点同士の関係が与えられ、
firstとsecondに繋がっているか調べたい点同士を入力します。
繋がっている場合Trueそうでない場合Falseを返します
例えばfirstにscout2
secondにscout3
を入力するとscout2とscout3はscout1を介して繋がっているのでTrueです。

###発生している問題・エラーメッセージ
1.s=abのところがわかりません。なぜここでabと言う名前をつけるのです?
2.return any(set([first, second]) <= s for s in setlist)はどういう意味ですか?

エラーメッセージ

###該当のソースコード

python

1def check_connection(network, first, second): 2 setlist = [] 3 for connection in network: 4 s = ab = set(connection.split('-')) 5 6 for t in setlist[:]: # we need to use copy 7 if t & ab: # check t include a, b 8 s = s | t 9 setlist.remove(t) 10 setlist.append(s) # only s include a, b 11 return any(set([first, second]) <= s for s in setlist)

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
python3.3

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

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

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

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

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

attakei

2016/06/21 12:03

現状の記載されているコードではインデントの状態がわからないので、https://teratail.com/help などを参考にコードブロックで囲みインデントな状態に整形してください
guest

回答1

0

ベストアンサー

うまく伝わるか、ちょっと自信ありませんが……

1.s=abのところがわかりません。なぜここでabと言う名前をつけるのです?

見た感じでは単純にnetworkの「2点間」であることを明示している以上の意味はなさそうです。

2.return any(set([first, second]) <= s for s in setlist)はどういう意味ですか?

インタラクティブシェルなどで、check_connectionの処理を1歩前まで進めると、
setlistには「連結関係にある点の集合」のリストが入ります。

問題となる行ですが、

  • set()は引数になっているlistをsetにします
  • set1 <= set2 は、set1の要素がすべてset2に含まれればTrueとなります
  • any()は引数になるset/listの中に1個でもTrueがあればTrueを返します

よって、「first, secondが事前に構築されたsetlistのどれかの要素に完全に含まれればTrue」となります。
内包表記を使って1行になっていますが、以下のような挙動をしていると思ってもらえれば良いかと。

python

1for point_set in setlist: 2 points = set([first, second]) 3 if points <= point_set: 4 return True 5return False

投稿2016/06/21 14:55

attakei

総合スコア2738

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問