mirror of
https://github.com/apachecn/ailearning.git
synced 2026-02-09 21:36:27 +08:00
100 lines
1.5 KiB
Markdown
100 lines
1.5 KiB
Markdown
# 列表与元组的速度比较
|
||
|
||
IPython 中用 `magic` 命令 `%timeit` 来计时。
|
||
|
||
## 比较生成速度
|
||
|
||
In [1]:
|
||
|
||
```py
|
||
%timeit [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]
|
||
|
||
```
|
||
|
||
```py
|
||
1000000 loops, best of 3: 456 ns per loop
|
||
|
||
```
|
||
|
||
In [2]:
|
||
|
||
```py
|
||
%timeit (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25)
|
||
|
||
```
|
||
|
||
```py
|
||
10000000 loops, best of 3: 23 ns per loop
|
||
|
||
```
|
||
|
||
可以看到,元组的生成速度要比列表的生成速度快得多,相差大概一个数量级。
|
||
|
||
## 比较遍历速度
|
||
|
||
产生内容相同的随机列表和元组:
|
||
|
||
In [3]:
|
||
|
||
```py
|
||
from numpy.random import rand
|
||
values = rand(10000,4)
|
||
lst = [list(row) for row in values]
|
||
tup = tuple(tuple(row) for row in values)
|
||
|
||
```
|
||
|
||
In [4]:
|
||
|
||
```py
|
||
%timeit for row in lst: list(row)
|
||
|
||
```
|
||
|
||
```py
|
||
100 loops, best of 3: 4.12 ms per loop
|
||
|
||
```
|
||
|
||
In [5]:
|
||
|
||
```py
|
||
%timeit for row in tup: tuple(row)
|
||
|
||
```
|
||
|
||
```py
|
||
100 loops, best of 3: 2.07 ms per loop
|
||
|
||
```
|
||
|
||
在遍历上,元组和列表的速度表现差不多。
|
||
|
||
## 比较遍历和索引速度:
|
||
|
||
In [6]:
|
||
|
||
```py
|
||
%timeit for row in lst: a = row[0] + 1
|
||
|
||
```
|
||
|
||
```py
|
||
The slowest run took 12.20 times longer than the fastest. This could mean that an intermediate result is being cached
|
||
100 loops, best of 3: 3.73 ms per loop
|
||
|
||
```
|
||
|
||
In [7]:
|
||
|
||
```py
|
||
%timeit for row in tup: a = row[0] + 1
|
||
|
||
```
|
||
|
||
```py
|
||
100 loops, best of 3: 3.82 ms per loop
|
||
|
||
```
|
||
|
||
元组的生成速度会比列表快很多,迭代速度快一点,索引速度差不多。 |