回答編集履歴
3
修正
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
修正
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
追記
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
|
充分分かり易いコードになるのであれば、変数を設ければ良いのです。
|