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

回答編集履歴

2

修正

2020/12/19 12:34

投稿

退会済みユーザー
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

修正

2020/12/19 12:34

投稿

退会済みユーザー
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 top_ten(list_txt):
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
- for word, count in a_tp:
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
- s.setdefault(count,[])
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(top_ten(txt)[:10])
45
+ print(top(10,txt))
49
46
 
50
- >> [(20, ['n', 'o', 'x']), (19, ['g', 'h']), (17, ['p', 's', 'y']), (16, ['r']), (14, ['f', 'v']), (13, ['w']), (10, ['l']), (9, ['b', 't']), (8, ['d', 'j', 'u']), (7, ['c', 'z'])]
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
  ```