回答編集履歴
2
修正
answer
CHANGED
@@ -20,8 +20,6 @@
|
|
20
20
|
'''
|
21
21
|
以下追加修正
|
22
22
|
'''
|
23
|
-
if stop >= len(a_tp):
|
24
|
-
return a_tp
|
25
23
|
# 集計数が同じ間は延長。異なれば打ち切る。
|
26
24
|
while stop < len(a_tp) and a_tp[stop - 1][1] == a_tp[stop][1]:
|
27
25
|
stop += 1
|
1
修正
answer
CHANGED
@@ -1,34 +1,31 @@
|
|
1
|
+
たとえば第「10」位までであれば、
|
1
|
-
a_tp = [('aaa', 8) , ('bbb', 6), ('ccc', 6)...
|
2
|
+
a_tp = [('aaa', 8) , ('bbb', 6), ('ccc', 6)...]
|
3
|
+
の「10番目」(インデックス「9」)以降の要素の集計数を、隣の要素の集計数と比較し、
|
2
|
-
|
4
|
+
集計数が等しければ、異なる集計数に出会うまで延長します。
|
3
|
-
|
4
|
-
あとは、逆に、個数をキーにして、同じ個数を持っている文字列をリストにした辞書を作成すればよいのではないでしょうか。
|
5
|
-
|
6
|
-
(文字列, 個数)のリスト
|
7
|
-
↓
|
8
|
-
(個数:文字列)の辞書
|
9
|
-
|
10
5
|
```
|
11
6
|
|
12
7
|
'''
|
8
|
+
引数
|
13
|
-
|
9
|
+
stop:上位第何位まで返すかを指定。
|
10
|
+
list_txt:集計対象の文字列
|
14
11
|
'''
|
15
|
-
def
|
12
|
+
def top(stop, list_txt):
|
16
|
-
|
13
|
+
|
17
14
|
list_lower = []
|
18
15
|
for w in list_txt:
|
19
16
|
list_lower.append(w.lower())
|
20
17
|
a_dict = dict((i, list_lower.count(i)) for i in list_lower)
|
21
18
|
a_tp = sorted(a_dict.items(), key=lambda x:x[1], reverse=True)
|
19
|
+
|
22
20
|
'''
|
23
|
-
以下追加
|
21
|
+
以下追加修正
|
24
|
-
'''
|
22
|
+
'''
|
25
|
-
# 個数をキー、文字列のリストを値とした辞書を作る
|
26
|
-
s={}
|
27
|
-
|
23
|
+
if stop >= len(a_tp):
|
24
|
+
return a_tp
|
25
|
+
# 集計数が同じ間は延長。異なれば打ち切る。
|
26
|
+
while stop < len(a_tp) and a_tp[stop - 1][1] == a_tp[stop][1]:
|
27
|
+
stop += 1
|
28
|
-
|
28
|
+
return a_tp[:stop]
|
29
|
-
s[count].append(word)
|
30
|
-
|
31
|
-
return [(k,v) for k,v in s.items()]
|
32
29
|
```
|
33
30
|
|
34
31
|
実行例
|
@@ -39,13 +36,13 @@
|
|
39
36
|
import random
|
40
37
|
txt=[]
|
41
38
|
for i in range(26):
|
42
|
-
txt.extend([chr(i+65)]*random.randint(1,20))
|
39
|
+
txt.extend([chr(i + 65)] * random.randint(1, 20))
|
43
40
|
|
44
41
|
print(txt)
|
45
42
|
|
46
43
|
>> ['A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', (略)...]
|
47
44
|
|
48
|
-
print(
|
45
|
+
print(top(10,txt))
|
49
46
|
|
50
|
-
>> [(
|
47
|
+
>> [('k', 20), ('s', 18), ('w', 18), ('p', 16), ('v', 15), ('e', 14), ('h', 14), ('m', 14), ('n', 13), ('q', 12), ('o', 12)]
|
51
48
|
```
|