回答編集履歴

2

追記2を追加

2019/08/07 14:54

投稿

mokemokechicken
mokemokechicken

スコア948

test CHANGED
@@ -83,3 +83,33 @@
83
83
  return max(counts) > 1
84
84
 
85
85
  ```
86
+
87
+
88
+
89
+ -------------
90
+
91
+ ■ 追記2
92
+
93
+ 質問そのものに対して回答してなかったですが、
94
+
95
+ 全体としては上記の `has_same_digits()` を使うと以下のように書けます。
96
+
97
+
98
+
99
+ ```
100
+
101
+ def count_digits_in_ranges(range_list):
102
+
103
+ for rng in range_list:
104
+
105
+ print(sum([has_same_digits(n) for n in range(rng[0], rng[1])]))
106
+
107
+
108
+
109
+
110
+
111
+ arr = [[1, 90], [5, 20]]
112
+
113
+ count_digits_in_ranges(arr)
114
+
115
+ ```

1

コメントを受けて追記

2019/08/07 14:54

投稿

mokemokechicken
mokemokechicken

スコア948

test CHANGED
@@ -27,3 +27,59 @@
27
27
 
28
28
 
29
29
  https://docs.python.org/ja/3/library/collections.html
30
+
31
+
32
+
33
+ --------
34
+
35
+
36
+
37
+ ■ 追記1
38
+
39
+
40
+
41
+ 一応この methodの引数は int しか取らない、というつもりで書きましたが、
42
+
43
+ 文字列やスペースも来るというなら例えば以下のように書くと回避はできます。
44
+
45
+
46
+
47
+ ```
48
+
49
+ def has_same_digits(n):
50
+
51
+ return Counter([x for x in str(n) if x in "0123456789"]).most_common(1)[0][1] > 1
52
+
53
+ ```
54
+
55
+
56
+
57
+ 文字列としてではなく、あくまで数値として各桁の処理をしたい(例えば任意のk進数で使いたいとか?)という感じであれば、以下のような実装もあるかもしれません。
58
+
59
+ ※ 10の部分を k に変えると、たぶん k進数で使える
60
+
61
+
62
+
63
+ ```
64
+
65
+ def has_same_digits(n):
66
+
67
+ assert isinstance(n, int)
68
+
69
+ counts = [0] * 10
70
+
71
+ if n < 0:
72
+
73
+ n = -n
74
+
75
+ while n > 0:
76
+
77
+ digit = n % 10
78
+
79
+ counts[digit] += 1
80
+
81
+ n = n // 10
82
+
83
+ return max(counts) > 1
84
+
85
+ ```