{ "metadata": { "name": "", "signature": "sha256:f171f20b6b4f604617a15117977adfe9901f18493d05b661e6bad34d7b824bdb" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# APPENDIX Python Language Essentials" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Python Interpreter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Basics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Scalar Types" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Control Flow" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Structures and Sequences" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tuple" ] }, { "cell_type": "code", "collapsed": false, "input": [ "tup = 4, 5, 6" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "tup" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "(4, 5, 6)" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "tup[0]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "4" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "nested_tup = (4, 5, 6), (7, 8)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "nested_tup" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "((4, 5, 6), (7, 8))" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "nested_tup[1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "(7, 8)" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "nested_tup[1][0]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "7" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "tuple([4, 0, 2])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "(4, 0, 2)" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "tup = tuple('string')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "tup" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "('s', 't', 'r', 'i', 'n', 'g')" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "tup[0]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "'s'" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "tup = tuple(['foo', [1, 2], True])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "tup" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "('foo', [1, 2], True)" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "tup[2] = False" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtup\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "tup[1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ "[1, 2]" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "tup[1].append(3)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "tup" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 25, "text": [ "('foo', [1, 2, 3], True)" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "(4, 'foo', True) + (6, False) + ('bar',)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 28, "text": [ "(4, 'foo', True, 6, False, 'bar')" ] } ], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "('foo', 'bar') * 4" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 29, "text": [ "('foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar')" ] } ], "prompt_number": 29 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####unacking tuple" ] }, { "cell_type": "code", "collapsed": false, "input": [ "tup = (4, 5, 6)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "tup" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ "(4, 5, 6)" ] } ], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "a, b, c = tup" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 32 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 33, "text": [ "4" ] } ], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "tup = (4, 5, (6, 7))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 34 }, { "cell_type": "code", "collapsed": false, "input": [ "tup" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ "(4, 5, (6, 7))" ] } ], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "a, b, (c, d) = tup" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 37 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 38, "text": [ "4" ] } ], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "c" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 39, "text": [ "6" ] } ], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [ "seq = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]\n", "seq" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 40, "text": [ "[(1, 2, 3), (4, 5, 6), (7, 8, 9)]" ] } ], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "for a, b, c in seq:\n", " print a, b, c" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 2 3\n", "4 5 6\n", "7 8 9\n" ] } ], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "for a in seq:\n", " print a" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(1, 2, 3)\n", "(4, 5, 6)\n", "(7, 8, 9)\n" ] } ], "prompt_number": 42 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####tuple methods" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = (1, 1, 2, 2, 2, 3, 4, 2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 44 }, { "cell_type": "code", "collapsed": false, "input": [ "a.count(2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 46, "text": [ "4" ] } ], "prompt_number": 46 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## List" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a_list = [2, 3, 7, None]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 47 }, { "cell_type": "code", "collapsed": false, "input": [ "a_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 48, "text": [ "[2, 3, 7, None]" ] } ], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "tup = ('foo', 'bar', 'baz')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list = list(tup)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 51, "text": [ "['foo', 'bar', 'baz']" ] } ], "prompt_number": 51 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####Adding and removing elements" ] }, { "cell_type": "code", "collapsed": false, "input": [ "b_list.append('dwarf')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 54, "text": [ "['foo', 'bar', 'baz', 'dwarf']" ] } ], "prompt_number": 54 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list.insert(1, 'red')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 55 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 56, "text": [ "['foo', 'red', 'bar', 'baz', 'dwarf']" ] } ], "prompt_number": 56 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list.pop(1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 57, "text": [ "'red'" ] } ], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 58, "text": [ "['foo', 'bar', 'baz', 'dwarf']" ] } ], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list.append('apple')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 59 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 60, "text": [ "['foo', 'bar', 'baz', 'dwarf', 'apple']" ] } ], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list.remove('apple')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 62, "text": [ "['foo', 'bar', 'baz', 'dwarf']" ] } ], "prompt_number": 62 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list.remove('bar')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "b_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 64, "text": [ "['foo', 'baz', 'dwarf']" ] } ], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "'foo' in b_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 65, "text": [ "True" ] } ], "prompt_number": 65 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####Concatentaing and combining lists" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a_list + b_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 66, "text": [ "[2, 3, 7, None, 'foo', 'baz', 'dwarf']" ] } ], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "a_list.extend(b_list)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [ "a_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 68, "text": [ "[2, 3, 7, None, 'foo', 'baz', 'dwarf']" ] } ], "prompt_number": 68 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Sorting" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = [7, 2, 5, 1, 3]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 69 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 70, "text": [ "[7, 2, 5, 1, 3]" ] } ], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "a.sort()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 71 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 72, "text": [ "[1, 2, 3, 5, 7]" ] } ], "prompt_number": 72 }, { "cell_type": "code", "collapsed": false, "input": [ "b = ['saw', 'small', 'he']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 73 }, { "cell_type": "code", "collapsed": false, "input": [ "b.sort(key = len)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 74 }, { "cell_type": "code", "collapsed": false, "input": [ "b" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 75, "text": [ "['he', 'saw', 'small']" ] } ], "prompt_number": 75 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####Binary search and maintaining a sorted list" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import bisect" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 76 }, { "cell_type": "code", "collapsed": false, "input": [ "c = [1, 2, 2, 2, 3, 4, 7]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 77 }, { "cell_type": "code", "collapsed": false, "input": [ "c" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 78, "text": [ "[1, 2, 2, 2, 3, 4, 7]" ] } ], "prompt_number": 78 }, { "cell_type": "code", "collapsed": false, "input": [ "bisect.bisect(c, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 79, "text": [ "4" ] } ], "prompt_number": 79 }, { "cell_type": "code", "collapsed": false, "input": [ "c" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 80, "text": [ "[1, 2, 2, 2, 3, 4, 7]" ] } ], "prompt_number": 80 }, { "cell_type": "code", "collapsed": false, "input": [ "bisect.bisect(c, 5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 82, "text": [ "6" ] } ], "prompt_number": 82 }, { "cell_type": "code", "collapsed": false, "input": [ "bisect.insort(c, 6)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 84 }, { "cell_type": "code", "collapsed": false, "input": [ "bisect.insort(c, 100)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 85 }, { "cell_type": "code", "collapsed": false, "input": [ "c" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 86, "text": [ "[1, 2, 2, 2, 3, 4, 6, 7, 100]" ] } ], "prompt_number": 86 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Slicing " ] }, { "cell_type": "code", "collapsed": false, "input": [ "seq = [7, 2, 3, 7, 6, 5, 1, 0]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 89 }, { "cell_type": "code", "collapsed": false, "input": [ "seq" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 90, "text": [ "[7, 2, 3, 7, 6, 5, 1, 0]" ] } ], "prompt_number": 90 }, { "cell_type": "code", "collapsed": false, "input": [ "seq[1: 5]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 91, "text": [ "[2, 3, 7, 6]" ] } ], "prompt_number": 91 }, { "cell_type": "code", "collapsed": false, "input": [ "seq[3: 4] = [6, 3]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 92 }, { "cell_type": "code", "collapsed": false, "input": [ "seq" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 93, "text": [ "[7, 2, 3, 6, 3, 6, 5, 1, 0]" ] } ], "prompt_number": 93 }, { "cell_type": "code", "collapsed": false, "input": [ "seq[:5]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 94, "text": [ "[7, 2, 3, 6, 3]" ] } ], "prompt_number": 94 }, { "cell_type": "code", "collapsed": false, "input": [ "seq[3:]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 95, "text": [ "[6, 3, 6, 5, 1, 0]" ] } ], "prompt_number": 95 }, { "cell_type": "code", "collapsed": false, "input": [ "seq[-4:]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 96, "text": [ "[6, 5, 1, 0]" ] } ], "prompt_number": 96 }, { "cell_type": "code", "collapsed": false, "input": [ "seq[::2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 97, "text": [ "[7, 3, 3, 5, 0]" ] } ], "prompt_number": 97 }, { "cell_type": "code", "collapsed": false, "input": [ "seq[::-1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 98, "text": [ "[0, 1, 5, 6, 3, 6, 3, 2, 7]" ] } ], "prompt_number": 98 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Built-in Sequence Functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "####enumerate" ] }, { "cell_type": "code", "collapsed": false, "input": [ "some_list = ['foo', 'bar', 'baz']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 99 }, { "cell_type": "code", "collapsed": false, "input": [ "for i, value in enumerate(some_list):\n", " print i, value" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0 foo\n", "1 bar\n", "2 baz\n" ] } ], "prompt_number": 100 }, { "cell_type": "code", "collapsed": false, "input": [ "mapping = dict((v, i) for i, v in enumerate(some_list))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 103 }, { "cell_type": "code", "collapsed": false, "input": [ "mapping" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 104, "text": [ "{'bar': 1, 'baz': 2, 'foo': 0}" ] } ], "prompt_number": 104 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####Sorted" ] }, { "cell_type": "code", "collapsed": false, "input": [ "seq" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 105, "text": [ "[7, 2, 3, 6, 3, 6, 5, 1, 0]" ] } ], "prompt_number": 105 }, { "cell_type": "code", "collapsed": false, "input": [ "sorted(seq)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 106, "text": [ "[0, 1, 2, 3, 3, 5, 6, 6, 7]" ] } ], "prompt_number": 106 }, { "cell_type": "code", "collapsed": false, "input": [ "seq.sort()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 107 }, { "cell_type": "code", "collapsed": false, "input": [ "seq" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 108, "text": [ "[0, 1, 2, 3, 3, 5, 6, 6, 7]" ] } ], "prompt_number": 108 }, { "cell_type": "code", "collapsed": false, "input": [ "sorted('horse race')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 109, "text": [ "[' ', 'a', 'c', 'e', 'e', 'h', 'o', 'r', 'r', 's']" ] } ], "prompt_number": 109 }, { "cell_type": "code", "collapsed": false, "input": [ "sorted(set('This is just sone string'))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 110, "text": [ "[' ', 'T', 'e', 'g', 'h', 'i', 'j', 'n', 'o', 'r', 's', 't', 'u']" ] } ], "prompt_number": 110 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####zip" ] }, { "cell_type": "code", "collapsed": false, "input": [ "seq1 = ['foo', 'bar', 'baz']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 111 }, { "cell_type": "code", "collapsed": false, "input": [ "seq2 = ['one', 'two', 'three']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 112 }, { "cell_type": "code", "collapsed": false, "input": [ "zip(seq1, seq2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 113, "text": [ "[('foo', 'one'), ('bar', 'two'), ('baz', 'three')]" ] } ], "prompt_number": 113 }, { "cell_type": "code", "collapsed": false, "input": [ "seq3 = [False, True]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 114 }, { "cell_type": "code", "collapsed": false, "input": [ "zip(seq1, seq2, seq3)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 115, "text": [ "[('foo', 'one', False), ('bar', 'two', True)]" ] } ], "prompt_number": 115 }, { "cell_type": "code", "collapsed": false, "input": [ "for i, (v1, v2) in enumerate(zip(seq1, seq2)):\n", " print i, (v1, v2)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0 ('foo', 'one')\n", "1 ('bar', 'two')\n", "2 ('baz', 'three')\n" ] } ], "prompt_number": 116 }, { "cell_type": "code", "collapsed": false, "input": [ "pitchers = [('Nolan', 'Ryan'), ('Roger', 'Clemens'), ('Schiling', 'Curt')]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 117 }, { "cell_type": "code", "collapsed": false, "input": [ "first_name, last_name = zip(*pitchers)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 118 }, { "cell_type": "code", "collapsed": false, "input": [ "first_name" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 119, "text": [ "('Nolan', 'Roger', 'Schiling')" ] } ], "prompt_number": 119 }, { "cell_type": "code", "collapsed": false, "input": [ "last_name" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 120, "text": [ "('Ryan', 'Clemens', 'Curt')" ] } ], "prompt_number": 120 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####reversed" ] }, { "cell_type": "code", "collapsed": false, "input": [ "range(10)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 121, "text": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" ] } ], "prompt_number": 121 }, { "cell_type": "code", "collapsed": false, "input": [ "reversed(range(10))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 122, "text": [ "" ] } ], "prompt_number": 122 }, { "cell_type": "code", "collapsed": false, "input": [ "list(reversed(range(10)))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 123, "text": [ "[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]" ] } ], "prompt_number": 123 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Dict" ] }, { "cell_type": "code", "collapsed": false, "input": [ "empty_dict = {}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 124 }, { "cell_type": "code", "collapsed": false, "input": [ "a = {'a': 'some_value', 'b': [1, 2, 3, 4]}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 125 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 126, "text": [ "{'a': 'some_value', 'b': [1, 2, 3, 4]}" ] } ], "prompt_number": 126 }, { "cell_type": "code", "collapsed": false, "input": [ "a[7] = 'an integer'" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 127 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 128, "text": [ "{7: 'an integer', 'a': 'some_value', 'b': [1, 2, 3, 4]}" ] } ], "prompt_number": 128 }, { "cell_type": "code", "collapsed": false, "input": [ "a['a']" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 129, "text": [ "'some_value'" ] } ], "prompt_number": 129 }, { "cell_type": "code", "collapsed": false, "input": [ "'b' in a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 130, "text": [ "True" ] } ], "prompt_number": 130 }, { "cell_type": "code", "collapsed": false, "input": [ "a[5] = 'some_value'" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 131 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 132, "text": [ "{5: 'some_value', 7: 'an integer', 'a': 'some_value', 'b': [1, 2, 3, 4]}" ] } ], "prompt_number": 132 }, { "cell_type": "code", "collapsed": false, "input": [ "del a[5]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 133 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 134, "text": [ "{7: 'an integer', 'a': 'some_value', 'b': [1, 2, 3, 4]}" ] } ], "prompt_number": 134 }, { "cell_type": "code", "collapsed": false, "input": [ "a.pop(7)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 136, "text": [ "'an integer'" ] } ], "prompt_number": 136 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 137, "text": [ "{'a': 'some_value', 'b': [1, 2, 3, 4]}" ] } ], "prompt_number": 137 }, { "cell_type": "code", "collapsed": false, "input": [ "a.keys()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 138, "text": [ "['a', 'b']" ] } ], "prompt_number": 138 }, { "cell_type": "code", "collapsed": false, "input": [ "a.values()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 139, "text": [ "['some_value', [1, 2, 3, 4]]" ] } ], "prompt_number": 139 }, { "cell_type": "code", "collapsed": false, "input": [ "a.update({'b': 'foo', 'c': 12})" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 140 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 141, "text": [ "{'a': 'some_value', 'b': 'foo', 'c': 12}" ] } ], "prompt_number": 141 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####Creating dict from sequences" ] }, { "cell_type": "code", "collapsed": false, "input": [ "mapping = dict(zip(range(5), list(reversed(range(5)))))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 142 }, { "cell_type": "code", "collapsed": false, "input": [ "mapping" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 143, "text": [ "{0: 4, 1: 3, 2: 2, 3: 1, 4: 0}" ] } ], "prompt_number": 143 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####default values" ] }, { "cell_type": "code", "collapsed": false, "input": [ "words = ['apple', 'bat', 'bar', 'atom', 'book']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 144 }, { "cell_type": "code", "collapsed": false, "input": [ "by_letters = {}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 145 }, { "cell_type": "code", "collapsed": false, "input": [ "for word in words:\n", " letter = word[0]\n", " print letter" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "a\n", "b\n", "b\n", "a\n", "b\n" ] } ], "prompt_number": 146 }, { "cell_type": "code", "collapsed": false, "input": [ "for word in words:\n", " letter = word[0]\n", " if letter not in by_letters:\n", " by_letters[letter] = [word]\n", " else:\n", " by_letters[letter].append(word)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 147 }, { "cell_type": "code", "collapsed": false, "input": [ "by_letters" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 148, "text": [ "{'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']}" ] } ], "prompt_number": 148 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### valid dict keys types" ] }, { "cell_type": "code", "collapsed": false, "input": [ "hash('string')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 149, "text": [ "-9167918882415130555" ] } ], "prompt_number": 149 }, { "cell_type": "code", "collapsed": false, "input": [ "hash((1, 2, 3))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 150, "text": [ "2528502973977326415" ] } ], "prompt_number": 150 }, { "cell_type": "code", "collapsed": false, "input": [ "hash((1, 2, [3, 4]))" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "unhashable type: 'list'", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mhash\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'list'" ] } ], "prompt_number": 151 }, { "cell_type": "markdown", "metadata": {}, "source": [ "##Set" ] }, { "cell_type": "code", "collapsed": false, "input": [ "set([1, 2, 3, 4, 5, 6])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 152, "text": [ "{1, 2, 3, 4, 5, 6}" ] } ], "prompt_number": 152 }, { "cell_type": "code", "collapsed": false, "input": [ "a = {1, 2, 3, 4, 5}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 153 }, { "cell_type": "code", "collapsed": false, "input": [ "b = {4, 5, 6, 7, 8}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 154 }, { "cell_type": "code", "collapsed": false, "input": [ "a|b" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 155, "text": [ "{1, 2, 3, 4, 5, 6, 7, 8}" ] } ], "prompt_number": 155 }, { "cell_type": "code", "collapsed": false, "input": [ "a&b" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 156, "text": [ "{4, 5}" ] } ], "prompt_number": 156 }, { "cell_type": "code", "collapsed": false, "input": [ "a - b" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 157, "text": [ "{1, 2, 3}" ] } ], "prompt_number": 157 }, { "cell_type": "code", "collapsed": false, "input": [ "a ^ b" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 159, "text": [ "{1, 2, 3, 6, 7, 8}" ] } ], "prompt_number": 159 }, { "cell_type": "code", "collapsed": false, "input": [ "{1, 2, 3}.issubset(a)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 160, "text": [ "True" ] } ], "prompt_number": 160 }, { "cell_type": "code", "collapsed": false, "input": [ "a.issuperset({1, 2, 3})" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 161, "text": [ "True" ] } ], "prompt_number": 161 }, { "cell_type": "code", "collapsed": false, "input": [ "a |= b" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 162 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 163, "text": [ "{1, 2, 3, 4, 5, 6, 7, 8}" ] } ], "prompt_number": 163 }, { "cell_type": "code", "collapsed": false, "input": [ "a |= {'apple'}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 164 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 165, "text": [ "{1, 2, 3, 4, 5, 6, 7, 8, 'apple'}" ] } ], "prompt_number": 165 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### List, Set and Dict Comprehensions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "strings = ['a', 'as', 'bat', 'car', 'dove', 'python']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 167 }, { "cell_type": "code", "collapsed": false, "input": [ "[x.upper() for x in strings if len(x)>2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 168, "text": [ "['BAT', 'CAR', 'DOVE', 'PYTHON']" ] } ], "prompt_number": 168 }, { "cell_type": "code", "collapsed": false, "input": [ "unique_length = {len(x) for x in strings}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 169 }, { "cell_type": "code", "collapsed": false, "input": [ "unique_length" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 170, "text": [ "{1, 2, 3, 4, 6}" ] } ], "prompt_number": 170 }, { "cell_type": "code", "collapsed": false, "input": [ "loc_mapping = {val: index for index, val in enumerate(strings)}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 171 }, { "cell_type": "code", "collapsed": false, "input": [ "loc_mapping" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 172, "text": [ "{'a': 0, 'as': 1, 'bat': 2, 'car': 3, 'dove': 4, 'python': 5}" ] } ], "prompt_number": 172 }, { "cell_type": "code", "collapsed": false, "input": [ "loc_mapping = dict((index, val) for val, index in enumerate(strings))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 175 }, { "cell_type": "code", "collapsed": false, "input": [ "loc_mapping" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 176, "text": [ "{'a': 0, 'as': 1, 'bat': 2, 'car': 3, 'dove': 4, 'python': 5}" ] } ], "prompt_number": 176 }, { "cell_type": "markdown", "metadata": {}, "source": [ "####Nested list comprehensions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "all_data = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],\n", " ['Susie', 'Casey', 'Jill', 'Ana', 'Eva', 'Jennifer', 'Stephanie']]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 177 }, { "cell_type": "code", "collapsed": false, "input": [ "name_of_interest = []\n", "for names in all_data:\n", " enough_us = [name for name in names if name.count('e') >= 2]\n", " name_of_interest.extend(enough_us)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 195 }, { "cell_type": "code", "collapsed": false, "input": [ "name_of_interest" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 196, "text": [ "['Jefferson', 'Wesley', 'Steven', 'Jennifer', 'Stephanie']" ] } ], "prompt_number": 196 }, { "cell_type": "code", "collapsed": false, "input": [ "result = [name for name in names for names in all_data if name.count('e') >= 2]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 197 }, { "cell_type": "code", "collapsed": false, "input": [ "result" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 198, "text": [ "['Jennifer', 'Jennifer', 'Stephanie', 'Stephanie']" ] } ], "prompt_number": 198 }, { "cell_type": "code", "collapsed": false, "input": [ "some_tuples = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 202 }, { "cell_type": "code", "collapsed": false, "input": [ "flattended = [x for tup in some_tuples for x in tup]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 205 }, { "cell_type": "code", "collapsed": false, "input": [ "flattended" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 206, "text": [ "[1, 2, 3, 4, 5, 6, 7, 8, 9]" ] } ], "prompt_number": 206 }, { "cell_type": "code", "collapsed": false, "input": [ "fla_2 = [[x for x in tup] for tup in some_tuples]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 210 }, { "cell_type": "code", "collapsed": false, "input": [ "fla_2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 211, "text": [ "[[1, 2, 3], [4, 5, 6], [7, 8, 9]]" ] } ], "prompt_number": 211 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#Functions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def my_function(x, y, z=1.5):\n", " if z>1:\n", " return z * (x + y)\n", " else:\n", " return z / (x + y)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "my_function(3, 4, z = 0.7)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "0.09999999999999999" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "my_function(3.14, 7, 3.5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "35.49" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###namespaces, Scope, and local functions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def func():\n", " a = []\n", " for i in range(5):\n", " a.append(i)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "a = []\n", "def func():\n", " for i in range(5):\n", " a.append(i)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "a = None\n", "\n", "def bind_a_value():\n", " global a\n", " a = []\n", " bind_a_variable()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "def outer_function(x, y, z):\n", " def inner_function(a, b, c):\n", " pass\n", " pass" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Return Multiple Values" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f():\n", " a = 5\n", " b = 6\n", " c = 7\n", " return a, b, c" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "a, b, c = f()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "def f():\n", " a = 5\n", " b = 6\n", " c = 7\n", " return {'a': a, 'b': b, 'c': c}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Functions are objects" ] }, { "cell_type": "code", "collapsed": false, "input": [ "states = ['Alabama', 'Georgia!', 'Georgia', 'georgia', 'FLOrida',\n", " 'south carolina##', 'West viginia?']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "import re\n", "\n", "def clean_strings(strings):\n", " result = []\n", " for value in strings:\n", " value = value.strip()\n", " value = re.sub('[!#?]', '', value)\n", " value = value.title()\n", " result.append(value)\n", " return result" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "clean_strings(states)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "['Alabama',\n", " 'Georgia',\n", " 'Georgia',\n", " 'Georgia',\n", " 'Florida',\n", " 'South Carolina',\n", " 'West Viginia']" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "def remove_punctuation(value):\n", " return re.sub('[!#?]', '', value)\n", "\n", "clean_ops = [str.strip, remove_punctuation, str.title]\n", "\n", "def clean_strings(strings, ops):\n", " result = []\n", " for value in strings:\n", " for function in clean_ops:\n", " value = function(value)\n", " result.append(value)\n", " return result" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "clean_strings(states, clean_ops)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "['Alabama',\n", " 'Georgia',\n", " 'Georgia',\n", " 'Georgia',\n", " 'Florida',\n", " 'South Carolina',\n", " 'West Viginia']" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "map(remove_punctuation, states)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "['Alabama',\n", " 'Georgia',\n", " 'Georgia',\n", " 'georgia',\n", " 'FLOrida',\n", " 'south carolina',\n", " 'West viginia']" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Anonumous (lambda) functions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def short_func(x):\n", " return x*2" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "equal_anno = lambda x: x*2" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "def apply_to_list(some_list, f):\n", " return [f(x) for x in some_list]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "ints = [4, 1, 0, 5, 7]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "apply_to_list(ints, lambda x: x*2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "[8, 2, 0, 10, 14]" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "strings = ['foo', 'bar', 'card', 'aaaa', 'abab']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "strings.sort(key = lambda x: len(set(list(strings))))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "strings.sort(key = lambda x: len(set(strings)))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": {}, "source": [ "###Closures: Functions that return functions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def make_closure(a):\n", " def closure():\n", " print 'I know the secret: %d' %a\n", " return closure" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "closure = make_closure(5)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [ "closure" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 40, "text": [ "" ] } ], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "print closure" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "make_closure(5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 42, "text": [ "" ] } ], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "def make_watcher():\n", " have_seen = {}\n", " \n", " def has_been_seen(x):\n", " if x in have_seen:\n", " return True\n", " else:\n", " have_seen[x] = True\n", " return False\n", " return has_been_seen" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 43 }, { "cell_type": "code", "collapsed": false, "input": [ "watcher = make_watcher()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 44 }, { "cell_type": "code", "collapsed": false, "input": [ "vals = [5, 6, 1, 5, 6, 3, 5]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 45 }, { "cell_type": "code", "collapsed": false, "input": [ "[watcher(x) for x in vals]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 46, "text": [ "[False, False, False, True, True, False, True]" ] } ], "prompt_number": 46 }, { "cell_type": "code", "collapsed": false, "input": [ "def make_counter():\n", " count = [0]\n", " def counter():\n", " count[0] += 1\n", " return count[0]\n", " return counter" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 47 }, { "cell_type": "code", "collapsed": false, "input": [ "counter = make_counter()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "def format_and_pad(template, space):\n", " def formatter(x):\n", " return (template % x).rjust(space)\n", " \n", " return formatter" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "fmt = format_and_pad('%.4f', 15)\n", "fmt(1.756)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 50, "text": [ "' 1.7560'" ] } ], "prompt_number": 50 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extended Call Syntax with *args, **kwargs" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def say_hello_then_call_f(f, *args, **kwargs):\n", " print 'args is ', args\n", " print 'kwargs is ', kwargs\n", " print 'Hello, Now I\\'m going to call %s.' %f\n", " return f(*args, **kwargs)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 51 }, { "cell_type": "code", "collapsed": false, "input": [ "def g(x, y, z = 1):\n", " return (x + y)/z" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "say_hello_then_call_f(g, 5, 7, z = 7.)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "args is (5, 7)\n", "kwargs is {'z': 7.0}\n", "Hello, Now I'm going to call .\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 55, "text": [ "1.7142857142857142" ] } ], "prompt_number": 55 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Currying: Partial Argument Application" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def add_numbers(x, y):\n", " return x + y" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 56 }, { "cell_type": "code", "collapsed": false, "input": [ "add_five = lambda y: add_numbers(5, y)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "add_five(10)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 64, "text": [ "15" ] } ], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "from functools import partial\n", "add_six = partial(add_numbers, 6)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "add_six(10)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 62, "text": [ "16" ] } ], "prompt_number": 62 }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 65 }, { "cell_type": "code", "collapsed": false, "input": [ "ma60 = lambda x: pandas.rolling_mean(x, 60)\n", "data.apply(ma60)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 'data' is not defined", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mma60\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mpandas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrolling_mean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m60\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdata\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mma60\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'data' is not defined" ] } ], "prompt_number": 66 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generators" ] }, { "cell_type": "code", "collapsed": false, "input": [ "some_dict = {'a': 1, 'b': 2, 'c': 3}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [ "for key in some_dict:\n", " print key" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "a\n", "c\n", "b\n" ] } ], "prompt_number": 68 }, { "cell_type": "code", "collapsed": false, "input": [ "dict_iterator = iter(some_dict)\n", "dict_iterator" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 69, "text": [ "" ] } ], "prompt_number": 69 }, { "cell_type": "code", "collapsed": false, "input": [ "list(dict_iterator)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 70, "text": [ "['a', 'c', 'b']" ] } ], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "def squares(n = 10):\n", " for i in xrange(1, n + 1):\n", " print 'Generating squares from 1 to %d' %(i**2)\n", " yield i**2" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 89 }, { "cell_type": "code", "collapsed": false, "input": [ "gen = squares()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 81 }, { "cell_type": "code", "collapsed": false, "input": [ "print gen" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 90 }, { "cell_type": "code", "collapsed": false, "input": [ "gen" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 82, "text": [ "" ] } ], "prompt_number": 82 }, { "cell_type": "code", "collapsed": false, "input": [ "for x in gen:\n", " print x" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Generating squares from 1 to 1\n", "1\n", "Generating squares from 1 to 4\n", "4\n", "Generating squares from 1 to 9\n", "9\n", "Generating squares from 1 to 16\n", "16\n", "Generating squares from 1 to 25\n", "25\n", "Generating squares from 1 to 36\n", "36\n", "Generating squares from 1 to 49\n", "49\n", "Generating squares from 1 to 64\n", "64\n", "Generating squares from 1 to 81\n", "81\n", "Generating squares from 1 to 100\n", "100\n" ] } ], "prompt_number": 83 }, { "cell_type": "code", "collapsed": false, "input": [ "def make_change(amount, coins = [1, 5, 10, 25], hand = None):\n", " hand = [] if hand is None else hand\n", " if amount == 0:\n", " yield hand\n", " for coin in coins:\n", " if coin > amount or (len(hand) > 0 and hand[-1] < coin):\n", " continue\n", " \n", " for result in make_change(amount - coin, coins = coins, hand = hand + [coin]):\n", " yield result" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 85 }, { "cell_type": "code", "collapsed": false, "input": [ "for way in make_change(100, coins=[10, 25, 50]):\n", " print way" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[10, 10, 10, 10, 10, 10, 10, 10, 10, 10]\n", "[25, 25, 10, 10, 10, 10, 10]\n", "[25, 25, 25, 25]\n", "[50, 10, 10, 10, 10, 10]\n", "[50, 25, 25]\n", "[50, 50]\n" ] } ], "prompt_number": 86 }, { "cell_type": "code", "collapsed": false, "input": [ "len(list(make_change(100)))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 87, "text": [ "242" ] } ], "prompt_number": 87 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Generator expressions" ] }, { "cell_type": "code", "collapsed": false, "input": [ "gen = (x**2 for x in xrange(100))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 92 }, { "cell_type": "code", "collapsed": false, "input": [ "gen" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 93, "text": [ " at 0x7faac2078690>" ] } ], "prompt_number": 93 }, { "cell_type": "code", "collapsed": false, "input": [ "def _make_gen():\n", " for x in xrange(100):\n", " yield x**2\n", "gen = _make_gen()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 94 }, { "cell_type": "code", "collapsed": false, "input": [ "sum(gen)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 95, "text": [ "328350" ] } ], "prompt_number": 95 }, { "cell_type": "code", "collapsed": false, "input": [ "sum(x**2 for x in xrange(100))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 96, "text": [ "328350" ] } ], "prompt_number": 96 }, { "cell_type": "code", "collapsed": false, "input": [ "dict((i, i**2) for i in xrange(5))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 98, "text": [ "{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}" ] } ], "prompt_number": 98 }, { "cell_type": "code", "collapsed": false, "input": [ "import itertools" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 99 }, { "cell_type": "code", "collapsed": false, "input": [ "first_letter = lambda x: x[0]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 100 }, { "cell_type": "code", "collapsed": false, "input": [ "names = ['Alan', 'Adam', 'Wes', 'Will', 'Albert', 'Steven']" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 101 }, { "cell_type": "code", "collapsed": false, "input": [ "for letter, name in itertools.groupby(names, first_letter):\n", " print letter, list(name)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "A ['Alan', 'Adam']\n", "W ['Wes', 'Will']\n", "A ['Albert']\n", "S ['Steven']\n" ] } ], "prompt_number": 102 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Files and the Operating system" ] }, { "cell_type": "code", "collapsed": false, "input": [ "path = 'ch13/segismundo.txt'" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 103 }, { "cell_type": "code", "collapsed": false, "input": [ "f = open(path)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 104 }, { "cell_type": "code", "collapsed": false, "input": [ "lines = [x.rstrip() for x in open(path)]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 105 }, { "cell_type": "code", "collapsed": false, "input": [ "lines" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 106, "text": [ "['Sue\\xc3\\xb1a el rico en su riqueza,',\n", " 'que m\\xc3\\xa1s cuidados le ofrece;',\n", " '',\n", " 'sue\\xc3\\xb1a el pobre que padece',\n", " 'su miseria y su pobreza;',\n", " '',\n", " 'sue\\xc3\\xb1a el que a medrar empieza,',\n", " 'sue\\xc3\\xb1a el que afana y pretende,',\n", " 'sue\\xc3\\xb1a el que agravia y ofende,',\n", " '',\n", " 'y en el mundo, en conclusi\\xc3\\xb3n,',\n", " 'todos sue\\xc3\\xb1an lo que son,',\n", " 'aunque ninguno lo entiende.',\n", " '']" ] } ], "prompt_number": 106 }, { "cell_type": "code", "collapsed": false, "input": [ "with open('tem.txt', 'w') as handle:\n", " handle.writelines(x for x in open(path) if len(x) > 1)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 107 }, { "cell_type": "code", "collapsed": false, "input": [ "open('tem.txt').readlines()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 108, "text": [ "['Sue\\xc3\\xb1a el rico en su riqueza,\\n',\n", " 'que m\\xc3\\xa1s cuidados le ofrece;\\n',\n", " 'sue\\xc3\\xb1a el pobre que padece\\n',\n", " 'su miseria y su pobreza;\\n',\n", " 'sue\\xc3\\xb1a el que a medrar empieza,\\n',\n", " 'sue\\xc3\\xb1a el que afana y pretende,\\n',\n", " 'sue\\xc3\\xb1a el que agravia y ofende,\\n',\n", " 'y en el mundo, en conclusi\\xc3\\xb3n,\\n',\n", " 'todos sue\\xc3\\xb1an lo que son,\\n',\n", " 'aunque ninguno lo entiende.\\n']" ] } ], "prompt_number": 108 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }