{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 列表与元组的速度比较" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "IPython 中用 `magic` 命令 `%timeit` 来计时。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 比较生成速度" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1000000 loops, best of 3: 456 ns per loop\n" ] } ], "source": [ "%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]" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000000 loops, best of 3: 23 ns per loop\n" ] } ], "source": [ "%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)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "可以看到,元组的生成速度要比列表的生成速度快得多,相差大概一个数量级。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 比较遍历速度" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "产生内容相同的随机列表和元组:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from numpy.random import rand\n", "values = rand(10000,4)\n", "lst = [list(row) for row in values]\n", "tup = tuple(tuple(row) for row in values)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 4.12 ms per loop\n" ] } ], "source": [ " %timeit for row in lst: list(row)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 2.07 ms per loop\n" ] } ], "source": [ "%timeit for row in tup: tuple(row)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在遍历上,元组和列表的速度表现差不多。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 比较遍历和索引速度:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 12.20 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100 loops, best of 3: 3.73 ms per loop\n" ] } ], "source": [ "%timeit for row in lst: a = row[0] + 1" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 3.82 ms per loop\n" ] } ], "source": [ "%timeit for row in tup: a = row[0] + 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "元组的生成速度会比列表快很多,迭代速度快一点,索引速度差不多。" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 0 }