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

回答編集履歴

3

修正

2019/12/09 14:03

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -24,7 +24,8 @@
24
24
 
25
25
  計測コードについて
26
26
  ---
27
+ 計測した結果、ほとんど差が出ない旨追記しましたが...
27
- 実行時間差があまりに少なく、偶発的に結果が逆転します。参考にならないです。
28
+ 実行時間差があまりに少なく、偶発的に結果が逆転するので撤回します。参考にならないです。
28
29
  ```Python
29
30
  import timeit
30
31
 

2

修正

2019/12/09 14:03

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -11,6 +11,20 @@
11
11
  効率だけ見るぶんには前者の方が良いことが多いです。
12
12
  しかしリストに対するlenは定数時間で取得できるので、ほとんど差は出ません。
13
13
 
14
+ **大きな差が出ないのであれば、実行効率より分かり易さを取るべきです。**
15
+
16
+ > 計算コストが高そうなときは変数をおくようにしています。
17
+
18
+ 充分分かり易いコードになるのであれば、変数を設ければ良いのです。
19
+
20
+ ||**何度も使う**|**一度しか使わない**|
21
+ |:--|:--:|:--:|
22
+ |**計算コストが高い**|変数を使うべき|どちらでも良い|
23
+ |**計算コストが安い**|どちらでも良い|どちらでも良い|
24
+
25
+ 計測コードについて
26
+ ---
27
+ 実行時間に差があまりに少なく、偶発的に結果が逆転します。参考にならないです。
14
28
  ```Python
15
29
  import timeit
16
30
 
@@ -38,18 +52,4 @@
38
52
  ```
39
53
  pattern1: 0.625347338616848
40
54
  pattern2: 0.6491380594670773
41
- ```
55
+ ```
42
-
43
- 100万回ずつ実行しても、0.024秒しか差が出ません。
44
- 平均すれば一回当たり24ナノ秒しか変わらないことが分かります。
45
-
46
- **大きな差が出ないのであれば、実行効率より分かり易さを取るべきです。**
47
-
48
- > 計算コストが高そうなときは変数をおくようにしています。
49
-
50
- 充分分かり易いコードになるのであれば、変数を設ければ良いのです。
51
-
52
- ||**何度も使う**|**一度しか使わない**|
53
- |:--|:--:|:--:|
54
- |**計算コストが高い**|変数を使うべき|どちらでも良い|
55
- |**計算コストが安い**|どちらでも良い|どちらでも良い|

1

追記

2019/12/09 13:59

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -11,8 +11,40 @@
11
11
  効率だけ見るぶんには前者の方が良いことが多いです。
12
12
  しかしリストに対するlenは定数時間で取得できるので、ほとんど差は出ません。
13
13
 
14
+ ```Python
14
- 大きな差が出ないのであれば、実行効率より分かり易さを取るべきです。
15
+ import timeit
15
16
 
17
+
18
+ def pattern1(l):
19
+ length = len(l)
20
+ for i in range(length):
21
+ pass
22
+
23
+ def pattern2(l):
24
+ for i in range(len(l)):
25
+ pass
26
+
27
+
28
+ l = ["a","b","c","d","e"]
29
+ print(
30
+ 'pattern1:', timeit.timeit(lambda: pattern1(l), number=1_000_000)
31
+ )
32
+ print(
33
+ 'pattern2:', timeit.timeit(lambda: pattern2(l), number=1_000_000)
34
+ )
35
+ ```
36
+
37
+ **実行結果** [Wandbox](https://wandbox.org/permlink/xaNs9O8CLCTzyDC4)
38
+ ```
39
+ pattern1: 0.625347338616848
40
+ pattern2: 0.6491380594670773
41
+ ```
42
+
43
+ 100万回ずつ実行しても、0.024秒しか差が出ません。
44
+ 平均すれば一回当たり24ナノ秒しか変わらないことが分かります。
45
+
46
+ **大きな差が出ないのであれば、実行効率より分かり易さを取るべきです。**
47
+
16
48
  > 計算コストが高そうなときは変数をおくようにしています。
17
49
 
18
50
  充分分かり易いコードになるのであれば、変数を設ければ良いのです。