列表与元组的速度比较

IPython 中用 magic 命令 %timeit 来计时。

比较生成速度

In [1]:

  1. %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]
  1. 1000000 loops, best of 3: 456 ns per loop

In [2]:

  1. %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)
  1. 10000000 loops, best of 3: 23 ns per loop

可以看到,元组的生成速度要比列表的生成速度快得多,相差大概一个数量级。

比较遍历速度

产生内容相同的随机列表和元组:

In [3]:

  1. from numpy.random import rand
  2. values = rand(10000,4)
  3. lst = [list(row) for row in values]
  4. tup = tuple(tuple(row) for row in values)

In [4]:

  1. %timeit for row in lst: list(row)
  1. 100 loops, best of 3: 4.12 ms per loop

In [5]:

  1. %timeit for row in tup: tuple(row)
  1. 100 loops, best of 3: 2.07 ms per loop

在遍历上,元组和列表的速度表现差不多。

比较遍历和索引速度:

In [6]:

  1. %timeit for row in lst: a = row[0] + 1
  1. The slowest run took 12.20 times longer than the fastest. This could mean that an intermediate result is being cached
  2. 100 loops, best of 3: 3.73 ms per loop

In [7]:

  1. %timeit for row in tup: a = row[0] + 1
  1. 100 loops, best of 3: 3.82 ms per loop

元组的生成速度会比列表快很多,迭代速度快一点,索引速度差不多。

原文: https://nbviewer.jupyter.org/github/lijin-THU/notes-python/blob/master/02-python-essentials/02.09-speed-comparison-between-list-&-tuple.ipynb