回答編集履歴

1

変更

2018/03/29 00:30

投稿

tachikoma
tachikoma

スコア3601

test CHANGED
@@ -9,6 +9,22 @@
9
9
 
10
10
 
11
11
  b=[2,3,7,30,32,64,103,111,200,204]
12
+
13
+
14
+
15
+ aa = defaultdict(set)
16
+
17
+ for item in a:
18
+
19
+ n = len(str(item))
20
+
21
+ aa[n].add(item)
22
+
23
+ aa
24
+
25
+ # defaultdict(set, {1: {1, 3, 6}, 2: {14, 30, 53}, 3: {103, 106}})
26
+
27
+
12
28
 
13
29
  bb = defaultdict(set)
14
30
 
@@ -26,19 +42,15 @@
26
42
 
27
43
 
28
44
 
29
- あとは桁数ごとにチェックを掛ける。
45
+ あとは桁数ごとにチェックを掛けて、一致す要素だけをまとめる
30
46
 
31
47
  ```Python
32
48
 
33
49
  array = []
34
50
 
35
- for item in a:
51
+ for n in set(aa):
36
52
 
37
- n = len(str(item))
38
-
39
- if item in bb[n]:
40
-
41
- array.append(item)
53
+ array.append(*(aa[n] & bb[n]))
42
54
 
43
55
  array
44
56
 
@@ -46,12 +58,6 @@
46
58
 
47
59
  ```
48
60
 
49
- もしくは、
50
61
 
51
- ```Python
52
62
 
53
- array = [item for item in a
54
-
55
- if item in bb[len(str(item))]]
63
+ パフォーマンスが向上するとはあまり思えないですが、測ってません。選ぶ際はShigemoriさんの方法と比べてからのほうがいいです。
56
-
57
- ```