teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

簡単に書けました。

2018/12/16 12:58

投稿

退会済みユーザー
answer CHANGED
@@ -28,6 +28,11 @@
28
28
  for x in range(1,10) は10未満の自然数を表します。ループを記述。
29
29
  if x % 2 == 1 は奇数を表します。条件を記述。
30
30
 
31
+ あ、もっと簡単に書けました。
32
+ ```python
33
+ s = {x for x in range(1,10,2)}
34
+ ```
35
+
31
36
  資料にもあるとおり、内包表記と同じことを外側のループで書くこともできます。
32
37
  ```python
33
38
  s = set()

2

内包表記の説明を追加しました。

2018/12/16 12:58

投稿

退会済みユーザー
answer CHANGED
@@ -11,4 +11,31 @@
11
11
  {x for x in p if 1 in x}
12
12
  {x for x in p if len(t.intersect(x)) > 0}
13
13
 
14
- 自分は初心者なので、もっと良い回答があると思います。
14
+ 自分は初心者なので、もっと良い回答があると思います。
15
+
16
+ **内包表記**
17
+ 集合の定義に外延と内包があるのはご存知でしょう。10未満の奇数の集合を考えます。
18
+ 外延 {1,3,5,7,9} 集合の要素をすべて列挙する
19
+ 内包 {x|0<x<10,xは整数,xは奇数} 集合の性質を定義する
20
+
21
+ pythonも、集合を定義するのに2通りの方法があります。
22
+ ```python
23
+ s = {1,3,5,7,9} # 外延
24
+ s = {x for x in range(1,10) if x % 2 == 1} # 内包
25
+ ```
26
+
27
+ 内包の書き方は以下の通りです。
28
+ for x in range(1,10) は10未満の自然数を表します。ループを記述。
29
+ if x % 2 == 1 は奇数を表します。条件を記述。
30
+
31
+ 資料にもあるとおり、内包表記と同じことを外側のループで書くこともできます。
32
+ ```python
33
+ s = set()
34
+ for x in range(1,10):
35
+ if x % 2 == 1:
36
+ s.add(x)
37
+
38
+ s
39
+ ```
40
+
41
+ 外側にループを書くと誤りをおかしやすいので、内包表記の方が良い。また内包表記が速いそうです。

1

エラーの原因を追加しました。

2018/12/16 12:22

投稿

退会済みユーザー
answer CHANGED
@@ -1,5 +1,13 @@
1
+ **エラーの原因**
1
- pは集合の集合なのでtとの共通部分はとれません。内包表記を使ってみました。
2
+ pは集合の集合なのでtとの共通部分はとれません。
2
3
 
4
+ 集合の集合どおしの共通部分をとればエラーは出ません。しかし目的は果たせません。
5
+ tt = FiniteSet(t) # 集合の集合を作る。
6
+ tt.intersect(p)
7
+
8
+ **解決策**
9
+ 内包表記を使ってみました。
10
+
3
11
  {x for x in p if 1 in x}
4
12
  {x for x in p if len(t.intersect(x)) > 0}
5
13