回答編集履歴
4
文言変更
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
シンプルにCounter辞書を使った処理にしてはいかがでしょう?
|
2
2
|
|
3
3
|
```python
|
4
4
|
from collections import Counter
|
3
内包表記を使わないように変更
test
CHANGED
@@ -15,7 +15,10 @@
|
|
15
15
|
|
16
16
|
w = []
|
17
17
|
for row in data:
|
18
|
+
f = []
|
19
|
+
for item, freq in zip(row, frequency):
|
18
|
-
|
20
|
+
f.append(1 / len(freq) / freq[item])
|
21
|
+
w.append(f)
|
19
22
|
print('w:', w)
|
20
23
|
|
21
24
|
s = list(map(sum, w))
|
2
内包表記をlistとmapに変更
test
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
どの文字が何個あったのかCounter辞書を使う処理にしてはいかがですか?
|
2
2
|
|
3
3
|
```python
|
4
|
-
import collections
|
5
4
|
from collections import Counter
|
6
|
-
from pkgutil import iter_importers
|
7
|
-
from pprint import pprint
|
8
5
|
|
9
6
|
data = [
|
10
7
|
["A", "B", "C", "D", "E", "E"],
|
@@ -13,7 +10,7 @@
|
|
13
10
|
["D", "A", "C", "B", "D", "E"],
|
14
11
|
]
|
15
12
|
|
16
|
-
frequency =
|
13
|
+
frequency = list(map(Counter, zip(*data)))
|
17
14
|
print('frequency:', frequency)
|
18
15
|
|
19
16
|
w = []
|
1
実行結果追記
test
CHANGED
@@ -24,4 +24,11 @@
|
|
24
24
|
s = list(map(sum, w))
|
25
25
|
print('s:', s)
|
26
26
|
```
|
27
|
+
実行結果
|
27
28
|
|
29
|
+
```
|
30
|
+
frequency: [Counter({'D': 2, 'A': 1, 'C': 1}), Counter({'B': 1, 'D': 1, 'C': 1, 'A': 1}), Counter({'C': 2, 'E': 2}), Counter({'A': 2, 'D': 1, 'B': 1}), Counter({'E': 1, 'B': 1, 'A': 1, 'D': 1}), Counter({'E': 2, 'B': 1, 'D': 1})]
|
31
|
+
w: [[0.3333333333333333, 0.25, 0.25, 0.3333333333333333, 0.25, 0.16666666666666666], [0.3333333333333333, 0.25, 0.25, 0.16666666666666666, 0.25, 0.3333333333333333], [0.16666666666666666, 0.25, 0.25, 0.16666666666666666, 0.25, 0.3333333333333333], [0.16666666666666666, 0.25, 0.25, 0.3333333333333333, 0.25, 0.16666666666666666]]
|
32
|
+
s: [1.5833333333333333, 1.5833333333333333, 1.4166666666666665, 1.4166666666666667]
|
33
|
+
```
|
34
|
+
|