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

回答編集履歴

1

変更

2018/03/29 00:30

投稿

tachikoma
tachikoma

スコア3601

answer CHANGED
@@ -4,6 +4,14 @@
4
4
  from collections import defaultdict
5
5
 
6
6
  b=[2,3,7,30,32,64,103,111,200,204]
7
+
8
+ aa = defaultdict(set)
9
+ for item in a:
10
+ n = len(str(item))
11
+ aa[n].add(item)
12
+ aa
13
+ # defaultdict(set, {1: {1, 3, 6}, 2: {14, 30, 53}, 3: {103, 106}})
14
+
7
15
  bb = defaultdict(set)
8
16
  for item in b:
9
17
  n = len(str(item))
@@ -12,18 +20,13 @@
12
20
  # defaultdict(set, {1: {2, 3, 7}, 2: {30, 32, 64}, 3: {103, 111, 200, 204}})
13
21
  ```
14
22
 
15
- あとは桁数ごとにチェックを掛ける。
23
+ あとは桁数ごとにチェックを掛けて、一致す要素だけをまとめる
16
24
  ```Python
17
25
  array = []
18
- for item in a:
26
+ for n in set(aa):
19
- n = len(str(item))
20
- if item in bb[n]:
21
- array.append(item)
27
+ array.append(*(aa[n] & bb[n]))
22
28
  array
23
29
  # [3, 30, 103]
24
30
  ```
25
- もしくは、
31
+
26
- ```Python
27
- array = [item for item in a
28
- if item in bb[len(str(item))]]
32
+ パフォーマンスが向上するとはあまり思えないですが、測ってません。選ぶ際はShigemoriさんの方法と比べてからのほうがいいです。
29
- ```