回答編集履歴

1

追記

2018/08/04 03:34

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -73,3 +73,81 @@
73
73
  ---
74
74
 
75
75
  ここで確かめた二つの記法を組み合わせると、質問のような動作が実現されます。
76
+
77
+
78
+
79
+ 追記
80
+
81
+ ---
82
+
83
+ > 中ではどのようなことが行われることになるか説明いただけないでしょうか。
84
+
85
+
86
+
87
+ ひょっとして、具体的な実装が気になるのでしょうか。
88
+
89
+ 簡単なNumPyアレイもどきを作ってみました。対応している演算は`%`と`==`だけです。
90
+
91
+ ```Python
92
+
93
+ class np_subset:
94
+
95
+ def __init__(self, arr):
96
+
97
+ self._arr = list(arr)
98
+
99
+
100
+
101
+ def __iter__(self):
102
+
103
+ return iter(self._arr)
104
+
105
+
106
+
107
+ def __mod__(self, num):
108
+
109
+ return np_subset(
110
+
111
+ elem % num for elem in self._arr
112
+
113
+ )
114
+
115
+
116
+
117
+ def __eq__(self, other):
118
+
119
+ return np_subset(
120
+
121
+ elem == other for elem in self._arr
122
+
123
+ )
124
+
125
+
126
+
127
+ def __getitem__(self, tf_arr):
128
+
129
+ return np_subset(
130
+
131
+ elem for elem, tf in zip(self._arr, tf_arr) if tf
132
+
133
+ )
134
+
135
+
136
+
137
+ def __str__(self):
138
+
139
+ return ' '.join(
140
+
141
+ map(str, self._arr)
142
+
143
+ )
144
+
145
+ ```
146
+
147
+
148
+
149
+ [Wandbox](https://wandbox.org/permlink/2COCuQ1jv3edApu3)
150
+
151
+
152
+
153
+ 演算子をオーバーロードしているだけです。