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

回答編集履歴

1

追記

2018/08/04 03:34

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -35,4 +35,43 @@
35
35
  ここで重要なのは、**Trueに対応した要素だけ抽出されていること**です。
36
36
 
37
37
  ---
38
- ここで確かめた二つの記法を組み合わせると、質問のような動作が実現されます。
38
+ ここで確かめた二つの記法を組み合わせると、質問のような動作が実現されます。
39
+
40
+ 追記
41
+ ---
42
+ > 中ではどのようなことが行われることになるか説明いただけないでしょうか。
43
+
44
+ ひょっとして、具体的な実装が気になるのでしょうか。
45
+ 簡単なNumPyアレイもどきを作ってみました。対応している演算は`%`と`==`だけです。
46
+ ```Python
47
+ class np_subset:
48
+ def __init__(self, arr):
49
+ self._arr = list(arr)
50
+
51
+ def __iter__(self):
52
+ return iter(self._arr)
53
+
54
+ def __mod__(self, num):
55
+ return np_subset(
56
+ elem % num for elem in self._arr
57
+ )
58
+
59
+ def __eq__(self, other):
60
+ return np_subset(
61
+ elem == other for elem in self._arr
62
+ )
63
+
64
+ def __getitem__(self, tf_arr):
65
+ return np_subset(
66
+ elem for elem, tf in zip(self._arr, tf_arr) if tf
67
+ )
68
+
69
+ def __str__(self):
70
+ return ' '.join(
71
+ map(str, self._arr)
72
+ )
73
+ ```
74
+
75
+ [Wandbox](https://wandbox.org/permlink/2COCuQ1jv3edApu3)
76
+
77
+ 演算子をオーバーロードしているだけです。