%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Tutorial slides on Python. % % Author: FOSSEE % Copyright (c) 2009, FOSSEE, IIT Bombay %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[14pt,compress]{beamer} %\documentclass[draft]{beamer} %\documentclass[compress,handout]{beamer} %\usepackage{pgfpages} %\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm] % Modified from: generic-ornate-15min-45min.de.tex \mode { \usetheme{Warsaw} \useoutertheme{infolines} \setbeamercovered{transparent} } \usepackage[english]{babel} \usepackage[latin1]{inputenc} %\usepackage{times} \usepackage[T1]{fontenc} % Taken from Fernando's slides. \usepackage{ae,aecompl} \usepackage{mathpazo,courier,euler} \usepackage[scaled=.95]{helvet} \definecolor{darkgreen}{rgb}{0,0.5,0} \usepackage{listings} \lstset{language=Python, basicstyle=\ttfamily\bfseries, commentstyle=\color{red}\itshape, stringstyle=\color{darkgreen}, showstringspaces=false, keywordstyle=\color{blue}\bfseries} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Macros \setbeamercolor{emphbar}{bg=blue!20, fg=black} \newcommand{\emphbar}[1] {\begin{beamercolorbox}[rounded=true]{emphbar} {#1} \end{beamercolorbox} } \newcounter{time} \setcounter{time}{0} \newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}} \newcommand{\typ}[1]{\textbf{\texttt{#1}}} \newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}} } %%% This is from Fernando's setup. % \usepackage{color} % \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} % % Use and configure listings package for nicely formatted code % \usepackage{listings} % \lstset{ % language=Python, % basicstyle=\small\ttfamily, % commentstyle=\ttfamily\color{blue}, % stringstyle=\ttfamily\color{orange}, % showstringspaces=false, % breaklines=true, % postbreak = \space\dots % } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Title page \title[Basic Python]{Python language: Data structures and functions} \author[FOSSEE Team] {The FOSSEE Group} \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} \date[] {SciPy.in 2010, Tutorials} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo} %\logo{\pgfuseimage{iitmlogo}} %% Delete this, if you do not want the table of contents to pop up at %% the beginning of each subsection: \AtBeginSubsection[] { \begin{frame} \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame} } \AtBeginSection[] { \begin{frame} \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame} } % If you wish to uncover everything in a step-wise fashion, uncomment % the following command: %\beamerdefaultoverlayspecification{<+->} %\includeonlyframes{current,current1,current2,current3,current4,current5,current6} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DOCUMENT STARTS \begin{document} \begin{frame} \titlepage \end{frame} \begin{frame} \frametitle{Outline} \tableofcontents % You might wish to add the option [pausesections] \end{frame} \section{Data structures} \subsection{Lists} \begin{frame}[fragile] \frametitle{Lists} \begin{block}{We already know that} \begin{lstlisting} num = [1, 2, 3, 4] \end{lstlisting} is a list \end{block} \end{frame} \begin{frame}[fragile] \frametitle{Lists: methods} \begin{lstlisting} In []: num = [9, 8, 2, 3, 7] In []: num + [4, 5, 6] Out[]: [9, 8, 2, 3, 7, 4, 5, 6] In []: num.append([4, 5, 6]) In []: num Out[]: [9, 8, 2, 3, 7, [4, 5, 6]] \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Lists: methods} \begin{lstlisting} In []: num = [9, 8, 2, 3, 7] In []: num.extend([4, 5, 6]) In []: num Out[]: [9, 8, 2, 3, 7, 4, 5, 6] In []: num.reverse() In []: num Out[]: [6, 5, 4, 7, 3, 2, 8, 9] In []: num.remove(6) In []: num \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{List containership} \emphbar{Recall \typ{num} is \typ{[9, 8, 2, 3, 7]}} \begin{lstlisting} In []: 4 in num Out[]: False In []: b = 8 In []: b in num Out[]: True In []: b not in num Out[]: False \end{lstlisting} \end{frame} \subsection{Tuples} \begin{frame}[fragile] \frametitle{Tuples: Immutable lists} \begin{lstlisting} In []: t = (1, 2, 3, 4, 5, 6, 7, 8) In []: t[0] + t[3] + t[-1] Out[]: 13 In []: t[4] = 7 \end{lstlisting} \pause \begin{block}{Note:} \begin{itemize} \item Tuples are immutable - cannot be changed \end{itemize} \end{block} \end{frame} \begin{frame} {A classic problem} \begin{block} {Interchange values} How to interchange values of two variables? \end{block} \pause \begin{block}{Note:} This Python idiom works for all types of variables.\\ They need not be of the same type! \end{block} \end{frame} \subsection{Dictionaries} \begin{frame}[fragile] \frametitle{Dictionaries: Introduction} \begin{itemize} \item Lists index using integers\\ Recall \typ{p = [2, 3, 5, 7]} and\\ \typ{p[1]} is equal to \typ{3} \item Dictionaries index using strings \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Dictionaries \ldots} \begin{lstlisting} In []: d = {'png' : 'image file', 'txt' : 'text file', 'py' : 'python code', 'java': 'bad code', 'cpp': 'complex code'} In []: d['txt'] Out[]: 'text file' \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Dictionaries \ldots} \begin{lstlisting} In []: 'py' in d Out[]: True In []: 'jpg' in d Out[]: False \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Dictionaries \ldots} \begin{small} \begin{lstlisting} In []: d.keys() Out[]: ['cpp', 'py', 'txt', 'java', 'png'] In []: d.values() Out[]: ['complex code', 'python code', 'text file', 'bad code', 'image file'] \end{lstlisting} \end{small} %% \inctime{10} \end{frame} \begin{frame}[fragile] \frametitle{Inserting elements into dictionary} \emphbar{\alert{\typ{d[key] = value}}} \begin{lstlisting} In []: d['bin'] = 'binary file' In []: d Out[]: {'bin': 'binary file', 'cpp': 'complex code', 'java': 'bad code', 'png': 'image file', 'py': 'python code', 'txt': 'text file'} \end{lstlisting} \emphbar{\alert{Duplicate keys are overwritten!}} \end{frame} \begin{frame}[fragile] \frametitle{Dictionaries: containership} \begin{lstlisting} In []: 'bin' in d Out[]: True In []: 'hs' in d Out[]: False \end{lstlisting} \begin{block}{Note} \begin{itemize} \item We can check for the containership of keys only \item Not values \end{itemize} \end{block} \end{frame} \begin{frame}[fragile] \frametitle{Dictionaries: methods} \begin{lstlisting} In []: d.keys() Out[]: ['bin', 'java', 'py', 'cpp', 'txt', 'png'] In []: d.values() Out[]: ['binary file', 'bad code', 'python code', 'complex code', 'text file', 'image file'] \end{lstlisting} \end{frame} \begin{frame} {Problem Set 2.1: Problem 2.1.1} You are given date strings of the form ``29 Jul, 2009'', or ``4 January 2008''. In other words a number, a string and another number, with a comma sometimes separating the items.\\Write a program that takes such a string as input and prints a tuple (yyyy, mm, dd) where all three elements are ints. \end{frame} \subsection{Sets} \begin{frame}[fragile] \frametitle{Sets} \begin{itemize} \item Simplest container, mutable \item No ordering, no duplicates \item usual suspects: union, intersection, subset \ldots \item >, >=, <, <=, in, \ldots \end{itemize} \begin{lstlisting} In []: f10 = set([1,2,3,5,8]) In []: p10 = set([2,3,5,7]) In []: f10 | p10 Out[]: set([1, 2, 3, 5, 7, 8]) \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Set \ldots} \begin{lstlisting} In []: f10 & p10 Out[]: set([2, 3, 5]) In []: f10 - p10 Out[]: set([1, 8]) In []: p10 - f10, f10 ^ p10 Out[]: (set([7]), set([1, 7, 8])) In []: set([2,3]) < p10 Out[]: True \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Set \ldots} \begin{lstlisting} In []: set([2,3]) <= p10 Out[]: True In []: 2 in p10 Out[]: True In []: 4 in p10 Out[]: False In []: len(f10) Out[]: 5 \end{lstlisting} \end{frame} \begin{frame} \frametitle{Problem set 2.2: Problem 2.2.1} Given a dictionary of the names of students and their marks, identify how many duplicate marks are there? and what are these? \end{frame} \begin{frame} \frametitle{Problem 2.2.2} Given a list of words, find all the anagrams in the list. \end{frame} \begin{frame} \frametitle{What did we learn?} \begin{itemize} \item Advanced Data structures: \begin{itemize} \item Lists \item Tuples \item Dictionaries \item Sets \end{itemize} \end{itemize} \end{frame} \end{document} %% Questions for Quiz %% %% ------------------ %% \begin{frame} \frametitle{\incqno} How do you find the presence of an element \emph{x} in the list \emph{a}? \end{frame} \begin{frame}[fragile] \frametitle{\incqno} \begin{lstlisting} In []: set([1, 2, 8, 2, 13, 8, 9]) \end{lstlisting} What is the output? \end{frame} \begin{frame}[fragile] \frametitle{\incqno} \begin{lstlisting} In []: a = {'a': 1, 'b': 2} In []: a['a'] = 10 In []: print a \end{lstlisting} What is the output? \end{frame} \begin{frame}[fragile] \frametitle{\incqno} \begin{lstlisting} In []: for i in range(3, 10, 2): ...: print i \end{lstlisting} What is the output? \end{frame} \begin{frame}[fragile] \frametitle{\incqno} \begin{lstlisting} In []: a = [1, 2, 3] In []: a.extend([5, 6]) \end{lstlisting} What is the value of a? \end{frame} \begin{frame}[fragile] \frametitle{\incqno} \begin{lstlisting} In []: a = (1, 2, 3) In []: a[1] = 10 \end{lstlisting} What is the result? \end{frame} \begin{frame}[fragile] \frametitle{\incqno} \begin{lstlisting} def func(x, y=10): print x+1, y+10 func(1) \end{lstlisting} What is the output? \end{frame}