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

回答編集履歴

5

テキスト追加

2020/05/10 02:14

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -47,4 +47,4 @@
47
47
 
48
48
  - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q260228-2](https://repl.it/@jun68ykt/Q260228-2)
49
49
 
50
- 私の環境だと、所要時間はだいたい10分の1になっています。
50
+ 私の環境だと、改善後の所要時間は、改善前のだいたい10分の1になっています。

4

テキスト追加

2020/05/10 02:14

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -17,4 +17,34 @@
17
17
  - `ls.count` は、`ls`に含まれる件数を数えますが、個数が1件なのかどうかだけが分かればよく、2件以上の場合、何件かは知る必要がないので、`count` を使わないようにする。
18
18
 
19
19
 
20
- 以上、参考になれば幸いです。
20
+ 以上、参考になれば幸いです。
21
+
22
+
23
+ ### 追記
24
+
25
+ 上記の改善項目を反映したコードの一例を挙げておきます。
26
+
27
+ ```Python
28
+ ls = [4, 3, 5, 2, 5, 1, 3, 5]
29
+
30
+
31
+ ls2 = []
32
+ dup = set()
33
+
34
+ for i, x in enumerate(ls):
35
+ if x in dup:
36
+ continue
37
+ if x in ls[i+1:]:
38
+ dup.add(x)
39
+ else:
40
+ ls2.append(x)
41
+
42
+
43
+ print(ls2) # => [4, 2, 1]
44
+ ```
45
+
46
+ 改善前と改善後を比較してみました。元のリスト`ls`は長さ10000で、要素は0以上2500未満のランダムな整数としました。
47
+
48
+ - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q260228-2](https://repl.it/@jun68ykt/Q260228-2)
49
+
50
+ 私の環境だと、所要時間はだいたい10分の1になっています。

3

テキスト追加

2020/05/10 02:07

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -9,4 +9,12 @@
9
9
  ```
10
10
  - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q260228](https://repl.it/@jun68ykt/Q260228)
11
11
 
12
+
13
+ 何かの作業途中で、使い捨ての一回だけ行うような用途のものならば、元のリストが非常に長いものでもない限り、上記のコードでも事足りるのではと思いますが、以下のような改善が考えられます。
14
+
12
- この後、たとえば、先頭から2番目の数を調べる時点で、`ls.count(3)` によって、`3` の出現回数の2回が得られて、その時点で`3`は除外対象と分かるので、以降のどこで `3` が見つかっても `count`を実行せずに除外対象とする、といった効率化が考えられます。
15
+ - たとえば、先頭から2番目の数を調べる時点で、`ls.count(3)` によって、`3` の出現回数の2回が得られて、その時点で`3`は除外対象と分かるので、以降のどこで `3` が見つかっても `count`を実行せずに除外対象とするように改善
16
+
17
+ - `ls.count` は、`ls`に含まれる件数を数えますが、個数が1件なのかどうかだけが分かればよく、2件以上の場合、何件かは知る必要がないので、`count` を使わないようにする。
18
+
19
+
20
+ 以上、参考になれば幸いです。

2

テキスト追加

2020/05/10 00:09

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -9,4 +9,4 @@
9
9
  ```
10
10
  - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q260228](https://repl.it/@jun68ykt/Q260228)
11
11
 
12
- この後、たとえば、先頭から2番目数を調べる時点で、`ls.count(3)` によって、`3` の出現回数の2回が得られて、その時点で`3`は除外対象と分かるので、以降のどこで `3` が見つかっても `count`を実行しないようにするといった効率化が考えられます。
12
+ この後、たとえば、先頭から2番目数を調べる時点で、`ls.count(3)` によって、`3` の出現回数の2回が得られて、その時点で`3`は除外対象と分かるので、以降のどこで `3` が見つかっても `count`を実行せず除外対象とするといった効率化が考えられます。

1

テキスト追加

2020/05/09 23:58

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -9,4 +9,4 @@
9
9
  ```
10
10
  - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q260228](https://repl.it/@jun68ykt/Q260228)
11
11
 
12
- この後、たとえば、先頭から2番目を数を調べる時点で、`3` の出現回数2回と分かるので、その時点で3は除外するものと分かるので、以降で `3` が見つかっても `count`を実行しないようにするといった効率化が考えられます。
12
+ この後、たとえば、先頭から2番目を数を調べる時点で、`ls.count(3)` によって、`3` の出現回数2回が得られて、その時点で`3`は除外対象と分かるので、以降のどこで `3` が見つかっても `count`を実行しないようにするといった効率化が考えられます。