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

回答編集履歴

3

追記

2020/10/20 23:21

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -36,4 +36,20 @@
36
36
 
37
37
  lst.sort(key=lambda s: counter[len(s)], reverse=True)
38
38
  print(lst)
39
+ ```
40
+
41
+ ---
42
+ **追記**:
43
+ lehshellさんの回答を見て、同じ頻度の『長さ』への考慮が足りなかったことに気付きました。
44
+ C)のソートは次の二段階に分けると良いですね。
45
+ ```Python
46
+ lst.sort(key=len)
47
+ lst.sort(key=lambda s: counter[len(s)], reverse=True)
48
+ print(lst)
49
+ ```
50
+
51
+ あるいはキー関数でタプルを返しても良いです。
52
+ ```Python
53
+ lst.sort(key=lambda s: (-counter[len(s)], len(s)))
54
+ print(lst)
39
55
  ```

2

誤字

2020/10/20 23:21

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -15,7 +15,7 @@
15
15
  A)B)については試行錯誤してみてほしいです。
16
16
  C)についてはちょっとめんどくさいので解説します。
17
17
 
18
- (大文字が頭文字以外に入る予知があるのなら、A)B)は一括した方が楽でしょう。)
18
+ (大文字が頭文字以外に入る余地があるのなら、A)B)は一括した方が楽でしょう。)
19
19
 
20
20
  ---
21
21
  #### **長さの頻度の得方**

1

追記

2020/10/20 09:37

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  端的に言うと今回のケースは次のように分割して考えることができます。
8
8
  ```Python
9
9
  # 優先順位が高い条件のソートほど後に行うようにします。
10
- lst.sort(key=...) # A) 大文字が先、小文字が後にソート
10
+ lst.sort(key=...) # A) 頭文字を見て、大文字が先、小文字が後にソート
11
11
  lst.sort(key=...) # B) アルファベット順にソート(大文字小文字は無視)
12
12
  lst.sort(key=...) # C) 長さの頻度降順にソート
13
13
  ```
@@ -15,6 +15,8 @@
15
15
  A)B)については試行錯誤してみてほしいです。
16
16
  C)についてはちょっとめんどくさいので解説します。
17
17
 
18
+ (大文字が頭文字以外に入る予知があるのなら、A)B)は一括した方が楽でしょう。)
19
+
18
20
  ---
19
21
  #### **長さの頻度の得方**
20
22
  collections.Counterが便利です。