{ "metadata": { "name": "", "signature": "sha256:cafae0e55ae01630aff5ca46caf56896315bc7fec5174ea75bcaa1502717d3fa" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Data Structures" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tuples" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# One dimensional, fixed-length, immutable sequence\n", "tup = (1, 2, 3)\n", "tup" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 48, "text": [ "(1, 2, 3)" ] } ], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "a_list = [1, 2, 3]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "# Convert to a tuple\n", "type(tuple(a_list))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 50, "text": [ "tuple" ] } ], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "# Nested tuples\n", "nested_tup = ([1, 2, 3], (4, 5))\n", "nested_tup" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 51, "text": [ "([1, 2, 3], (4, 5))" ] } ], "prompt_number": 51 }, { "cell_type": "code", "collapsed": false, "input": [ "# Access by index O(1)\n", "nested_tup[0]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 52, "text": [ "[1, 2, 3]" ] } ], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "# Although tuples are immutable, their contents can contain mutable objects\n", "nested_tup[0].append(4)\n", "nested_tup[0]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 53, "text": [ "[1, 2, 3, 4]" ] } ], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "# Concatenate tuples\n", "# Creates a new tuple and copies objects\n", "(1, 3, 2) + (4, 5, 6)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 54, "text": [ "(1, 3, 2, 4, 5, 6)" ] } ], "prompt_number": 54 }, { "cell_type": "code", "collapsed": false, "input": [ "# Multiply copies references to objects (objects themselves are not copied)\n", "('foo', 'bar') * 2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 55, "text": [ "('foo', 'bar', 'foo', 'bar')" ] } ], "prompt_number": 55 }, { "cell_type": "code", "collapsed": false, "input": [ "# Unpack tuples\n", "a, b = nested_tup\n", "a, b" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 56, "text": [ "([1, 2, 3, 4], (4, 5))" ] } ], "prompt_number": 56 }, { "cell_type": "code", "collapsed": false, "input": [ "# Unpack nested tuples\n", "(a, b, c, d), (e, f) = nested_tup\n", "a, b, c, d, e, f" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 57, "text": [ "(1, 2, 3, 4, 4, 5)" ] } ], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "# A common use of variable unpacking is when iterating over sequences\n", "# of tuples or lists\n", "seq = [( 1, 2, 3), (4, 5, 6), (7, 8, 9)] \n", "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": 58 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lists" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# One dimensional, variable-length, mutable sequence\n", "a_list = [1, 2, 3]\n", "a_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 59, "text": [ "[1, 2, 3]" ] } ], "prompt_number": 59 }, { "cell_type": "code", "collapsed": false, "input": [ "# Convert to a list\n", "type(list(tup))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 60, "text": [ "list" ] } ], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "# Nested list\n", "nested_list = [(1, 2, 3), [4, 5]]\n", "nested_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 61, "text": [ "[(1, 2, 3), [4, 5]]" ] } ], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "# Access by index\n", "nested_list[1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 62, "text": [ "[4, 5]" ] } ], "prompt_number": 62 }, { "cell_type": "code", "collapsed": false, "input": [ "# Append an element O(1)\n", "nested_list.append(6)\n", "nested_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 63, "text": [ "[(1, 2, 3), [4, 5], 6]" ] } ], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "# Insert an element at a specific index\n", "# Insert is expensive as it has to shift subsequent elements O(n)\n", "nested_list.insert(0, 'start')\n", "nested_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 64, "text": [ "['start', (1, 2, 3), [4, 5], 6]" ] } ], "prompt_number": 64 }, { "cell_type": "code", "collapsed": false, "input": [ "# Pop removes and returns an element from a specified index\n", "# Pop is expensive as it has to shift subsequent elements O(n)\n", "# O(1) if pop is used for the last element\n", "nested_list.pop(0)\n", "nested_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 65, "text": [ "[(1, 2, 3), [4, 5], 6]" ] } ], "prompt_number": 65 }, { "cell_type": "code", "collapsed": false, "input": [ "# Remove locates the first such value and removes it O(n)\n", "nested_list.remove((1, 2, 3))\n", "nested_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 66, "text": [ "[[4, 5], 6]" ] } ], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "# Check if a list contains a value O(n)\n", "6 in nested_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 67, "text": [ "True" ] } ], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [ "# Concatenate lists\n", "# Creates a new list and copies objects\n", "[1, 3, 2] + [4, 5, 6]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 68, "text": [ "[1, 3, 2, 4, 5, 6]" ] } ], "prompt_number": 68 }, { "cell_type": "code", "collapsed": false, "input": [ "# Extend a list by appending elements\n", "# Faster than concatenating lists\n", "nested_list.extend([7, 8, 9])\n", "nested_list" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 71, "text": [ "[[4, 5], 6, 7, 8, 9, 7, 8, 9]" ] } ], "prompt_number": 71 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }