回答編集履歴

5

テキスト追加

2020/05/10 02:14

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -96,4 +96,4 @@
96
96
 
97
97
 
98
98
 
99
- 私の環境だと、所要時間はだいたい10分の1になっています。
99
+ 私の環境だと、改善後の所要時間は、改善前のだいたい10分の1になっています。

4

テキスト追加

2020/05/10 02:14

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -37,3 +37,63 @@
37
37
 
38
38
 
39
39
  以上、参考になれば幸いです。
40
+
41
+
42
+
43
+
44
+
45
+ ### 追記
46
+
47
+
48
+
49
+ 上記の改善項目を反映したコードの一例を挙げておきます。
50
+
51
+
52
+
53
+ ```Python
54
+
55
+ ls = [4, 3, 5, 2, 5, 1, 3, 5]
56
+
57
+
58
+
59
+
60
+
61
+ ls2 = []
62
+
63
+ dup = set()
64
+
65
+
66
+
67
+ for i, x in enumerate(ls):
68
+
69
+ if x in dup:
70
+
71
+ continue
72
+
73
+ if x in ls[i+1:]:
74
+
75
+ dup.add(x)
76
+
77
+ else:
78
+
79
+ ls2.append(x)
80
+
81
+
82
+
83
+
84
+
85
+ print(ls2) # => [4, 2, 1]
86
+
87
+ ```
88
+
89
+
90
+
91
+ 改善前と改善後を比較してみました。元のリスト`ls`は長さ10000で、要素は0以上2500未満のランダムな整数としました。
92
+
93
+
94
+
95
+ - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q260228-2](https://repl.it/@jun68ykt/Q260228-2)
96
+
97
+
98
+
99
+ 私の環境だと、所要時間はだいたい10分の1になっています。

3

テキスト追加

2020/05/10 02:07

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -20,4 +20,20 @@
20
20
 
21
21
 
22
22
 
23
+
24
+
25
+ 何かの作業途中で、使い捨ての一回だけ行うような用途のものならば、元のリストが非常に長いものでもない限り、上記のコードでも事足りるのではと思いますが、以下のような改善が考えられます。
26
+
27
+
28
+
23
- この後、たとえば、先頭から2番目の数を調べる時点で、`ls.count(3)` によって、`3` の出現回数の2回が得られて、その時点で`3`は除外対象と分かるので、以降のどこで `3` が見つかっても `count`を実行せずに除外対象とする、といった効率化が考えられます。
29
+ - たとえば、先頭から2番目の数を調べる時点で、`ls.count(3)` によって、`3` の出現回数の2回が得られて、その時点で`3`は除外対象と分かるので、以降のどこで `3` が見つかっても `count`を実行せずに除外対象とするように改善
30
+
31
+
32
+
33
+ - `ls.count` は、`ls`に含まれる件数を数えますが、個数が1件なのかどうかだけが分かればよく、2件以上の場合、何件かは知る必要がないので、`count` を使わないようにする。
34
+
35
+
36
+
37
+
38
+
39
+ 以上、参考になれば幸いです。

2

テキスト追加

2020/05/10 00:09

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -20,4 +20,4 @@
20
20
 
21
21
 
22
22
 
23
- この後、たとえば、先頭から2番目数を調べる時点で、`ls.count(3)` によって、`3` の出現回数の2回が得られて、その時点で`3`は除外対象と分かるので、以降のどこで `3` が見つかっても `count`を実行しないようにするといった効率化が考えられます。
23
+ この後、たとえば、先頭から2番目数を調べる時点で、`ls.count(3)` によって、`3` の出現回数の2回が得られて、その時点で`3`は除外対象と分かるので、以降のどこで `3` が見つかっても `count`を実行せず除外対象とするといった効率化が考えられます。

1

テキスト追加

2020/05/09 23:58

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -20,4 +20,4 @@
20
20
 
21
21
 
22
22
 
23
- この後、たとえば、先頭から2番目を数を調べる時点で、`3` の出現回数2回と分かるので、その時点で3は除外するものと分かるので、以降で `3` が見つかっても `count`を実行しないようにするといった効率化が考えられます。
23
+ この後、たとえば、先頭から2番目を数を調べる時点で、`ls.count(3)` によって、`3` の出現回数2回が得られて、その時点で`3`は除外対象と分かるので、以降のどこで `3` が見つかっても `count`を実行しないようにするといった効率化が考えられます。