csc 221: introduction to programming fall 2012

Download CSC 221: Introduction to Programming Fall 2012

If you can't read please download the document

Upload: saxton

Post on 07-Jan-2016

28 views

Category:

Documents


1 download

DESCRIPTION

Lists lists as sequences list operations +, *, len , indexing, slicing, for-in, in example: dice stats from strings to lists list methods index, count, sort, reverse, append, extend, insert, remove building lists list comprehensions, conditional comprehensions big data. - PowerPoint PPT Presentation

TRANSCRIPT

  • *CSC 221: Introduction to Programming Fall 2012Listslists as sequenceslist operations+, *, len, indexing, slicing, for-in, inexample: dice statsfrom strings to listslist methodsindex, count, sort, reverse, append, extend, insert, removebuilding listslist comprehensions, conditional comprehensionsbig data

  • String reviewrecall that a Python string is a sequence of characters

    basic operations on strings:+ concatenates strings* concatenates multiple copieslen function indexing via [i]slicing via [s:e], [s:e:n], [:e], [s:],

    string methods:isupper, islower, isalpha, isdigit, isspacecapitalize, upper, lowerfind, rfind, count, replacestrip, lstrip, rstripcenter, ljust, rjust

    *

  • Listsclosely related: a list is a sequence of arbitrary itemscan specify the contents of a list in brackets, separated by commas

    the same sequence operations apply to lists:+ concatenates lists* concatenates multiple copieslen function indexing via [i]slicing via [s:e], [s:e:n], [:e], [s:],

    *

  • List operation examples*note: a range is sequence similar to a list

    can be converted into a list using list

  • Exercisesgrab a partner and go to codingbat.com

    solve problems (in order) from the List-1 category

    all of these problems can be solved using list indexing, slicing, +, and **

  • Traversing a list sequenceas with strings (character sequences), can traverse a list using for-in*likewise, can test for list membership using in

  • Example: averaging numberssuppose you have a list of numbers (e.g., grades)want to calculate the average of those numbers*any potential problems? i.e., will this function work correctly on all possible lists of numbers?modify this function so that it returns 0.0 on an empty list

  • Dice statsrecall earlier examples involving simulated dice rollssuppose we wanted to perform repeated rolls, keep track of the number of 7's*

  • Dice stats (cont.)we could similarly define functions for the other dice totalsor, could generalize by adding a parameter for the desired total*do these totals add up to 10,000?

    should they?

  • Dice stats (cont.)the problem with separate calls for each dice total is that each call is independent of the othersactually simulating 10,000 x 11 different rollsWASTEFUL, and leads to inconsistent results*what we need is to be able to count all the totals at the same timecould do it by having 11 variables, each keeping count for a dice totalwould need an 11-case if-elif-else to check for each dice totalwould then need to return or print each count

  • UGLY!extremely tedious

    what if we wanted to extend this example to 8-sided dice?

    what would have to change?*

  • Better solution11 separate variables are unwieldy no way to test/update uniformly

    alternatively, could place all 11 counters in a single listactually, to simplify things will create a list with 13 numberstwoCount will be stored in rollCount[2]threeCount will be stored in rollCount[3]twelveCount will be stored in rollCount[12]*

  • Nicer outputsimply returning the list of counts is not idealshows the placeholder numbers in indices 0 and 1difficult to see which number goes with which dice total*

  • Generalized versionfinally, could generalize to work for different dicecan even format the output to align the numbers*

  • Strings & liststhere is a useful string method that converts a string into a liststr.split() returns a list of the separate words in str

    by default, it uses whitespace to separate the words, but can provide an optional argument to specify different separators

    *

  • Adding user interactionsince it is easier for the user to enter multiple items in a string, reading input as a string and then splitting into a list for processing is common

    will the following work for averaging grades?*

  • Adding user interaction (cont.)not quite split produces an array of stringsbut, average is expecting a list of numbers

    could go through the list and convert each string with the corresponding numbersimpler, could have average convert each element to a number when processing*

  • Mystery functionwhat does this function do?*

  • Pig Latin revisitedif we want to convert a phrase into Pig Latinsplit the string into individual wordsuse the pigLatin function to convertappend the Pig Latin words back together*why the call to strip?

  • List methodssimilar to string, the list type has useful methods defined for itindex(x) Return the index of the first occurrence of x (error if not in the list)count(x) Return the number of times x appears in the listsort() Sort the items of the list, in placereverse() Reverse the elements of the list, in place

    the following methods actually modify the contents of the listunlike strings, lists are mutable objects

    append(x) Add x to the end of the listextend(L) Extend the list by appending all the items in L to endinsert(i, x) Insert x at a given position iremove(x) Remove the first occurrence of x (error if not in the list)*

  • More practicegrab a partner and go back to Codingbat

    solve the first 3 problems from the List-2 category

    these problems can be solved using a loop to traverse and inspect the list items*

  • Review: building stringswe have seen numerous examples of building strings

    *

  • Similarly: building listssince lists & strings are both sequences, can similarly build lists

    *

  • List comprehensionsPython has an alternative mechanism for building lists: comprehensionsinspired by math notation for defining sets

    squares(N) =

    in Python: [EXPR_ON_X for X in LIST]

    *

  • More comprehensions*

  • Even more*

  • Exercises:use list comprehensions to build the following lists of numbers:

    a list of all odd numbers from 1 to N

    a list of all cubes from 1 to N

    a list of the first N powers of 2*given a list of words, use list comprehensions to build:

    a list containing all of the same words, but capitalized

    a list containing all of the same words, but each word reversed

    a list containing the lengths of all of the same words

  • Throwaway comprehensionscomprehensions can be useful as part of bigger tasks*

  • Another example*note: the string method join appends the contents of a list into a single string, using the specified divider

  • Conditional comprehensionscomprehensions can include conditionsin general: [EXPR_ON_X for X in LIST if CONDITION]*

  • Another example*

  • Big datalists enable us to store and process large amounts of datadictionary.txt contains 117,633 wordssuppose we want to write a function that finds anagrams

    will need to read in and store the dictionaryrepeatedly prompt the user for a wordfind & display all anagrams of that word in the dictionary

    how can we determine if two words are anagrams?generate the alphagram of each word:"spear" "aeprs""pares" "aeprsif the alphagrams are identical, the words are anagrams

    *

  • Anagram finder*

  • 2009 NBA statsNBA2009.csv is a comma-separated data filecontains NBA stats from the 2009 season (from NBA *

  • Stats listwe can read in the stats and store the data in a listdo we want a list of strings?

    ['Arron,Afflalo,DEN,82,2230,724,59,193,252,138,46,30,74,225,585,272,98,72,249,108', 'Alexis,Ajinca,CHR,6,30,10,1,3,4,0,1,1,2,5,10,5,1,0,0,0', 'LaMarcus,Aldridge,POR,78,2922,1393,192,435,627,160,67,48,104,231,1169,579,304,230,16,5', 'Joe,Alexander,CHI,8,29,4,2,3,5,2,1,1,0,9,6,1,3,2,1,0'] ...]

    or a list of lists

    [['Arron', 'Afflalo', 'DEN', '82', '2230', '724', '59', '193', '252', '138', '46', '30', '74', '225', '585', '272', '98', '72', '249', '108'], ['Alexis', 'Ajinca', 'CHR', '6', '30', '10', '1', '3', '4', '0', '1', '1', '2', '5', '10', '5', '1', '0', '0', '0'], ['LaMarcus', 'Aldridge', 'POR', '78', '2922', '1393', '192', '435', '627', '160', '67', '48', '104', '231', '1169', '579', '304', '230', '16', '5'], ...]*

  • Processing the stats*

  • Processing the stats*