sequences motivation for this video series
play

Sequences Motivation for this Video Series Strings are a very, - PowerPoint PPT Presentation

Module 15 Sequences Motivation for this Video Series Strings are a very, very useful type But they are also very limited Break everything into individual letters What if we want to work with numbers? Or if want to work with


  1. Module 15 Sequences

  2. Motivation for this Video Series • Strings are a very, very useful type • But they are also very limited § Break everything into individual letters § What if we want to work with numbers? § Or if want to work with words, not letters? • This is going to require a new type § Let’s look at what features strings have § See how to make them more general

  3. Recall: String are Indexed • s = 'abc d' • What are limitations? 0 1 2 3 4 • Slots: chars not words a b c d § Ex: 'Hello World' • Access chars with [] § Want word positions? § s[0] is 'a' § Needs many steps § s[4] is 'd' • Cannot do numbers § s[0:2] is 'ab' (no c ) § Ex: '123, 456' § s[2:] is 'c d' § Only access digits

  4. Tuple: Sequence of Value • x = (5, 6, 5, 9, 15, 23) Inside parens, comma separated 0 1 2 3 4 5 5 6 5 9 15 23 • Can put anything in it • Access values with [] § (True, False) § x[0] is 5 § ('Hello', 'World') § x[4] is 15 • Can mix-and-match § x[0:2] is (5,6) § (True, 1) § x[3:] is (9,15,23) § ('Hello', 3)

  5. Two Tricky Things about Tuples • What about an empty tuple? § Empty String: '' § Empty Tuple: () • What about a one element tuple? § Incorrect: (4) <= This is 4 § Correct: (4,) • But otherwise similar to strings

  6. Tuples and the Python Tutor • Looks like an object § Folder with id • But not mutable § Cannot change contents § Like a string

  7. Tuples and the Python Tutor • Looks like an object § Folder with id • But not mutable x (5, 6, 7, -2) § Cannot change contents § Like a string OK! (kinda)

  8. Tuples Support String-like Operations • Operation +: x 1 + x 2 • Operation in : x 1 in x 2 § Glues if x 2 to end of x 1 § Tests if x 1 “a value in” x 2 § Called concatenation § Not a subsequence § Evaluates to a tuple § Evaluates to a boolean • Examples : • Examples : § (1,2) + (3,4) is (1,2,3,4) § 5 in (5,6,9) is True § (1,2) + (3,) is (1,2,3) § 2 in (5,6,9) is False § (1,2) + () is (1,2) § (5,6) in (5,6,9) is False

  9. Built-In Tuple Functions • The len function § Returns length (# of elements) of tuple § Example: len((1,2,3)) is 3 • The tuple function § Converts a value to a tuple § Can only be applied to iterable types § Right now: strings and tuples § Example: tuple('abc') is ('a', 'b', 'c')

  10. Tuples Have Methods (Like Strings) • Example: count x = (3,5,3,5,5,9) § x.count(3) == 2 § x.count(9) == 1 § x.count(1) == 0 § x.count(5) == 3 • Example: index Just like string methods § x.index(3) == 0 with the same name § x.index(9) == 5 § x.index(1) CRASHES § x.index(5) == 1

  11. Tuples and Expressions • Tuple parens () can • Execute the following: contain expressions >>> a = 5 >>> b = 7 • Called a tuple expression >>> x = (a, b, a+b) § Python must evaluate it § Evaluates each expression • What is x[2]? § Puts the value in tuple A: 'a+b' • Example: B: 12 >>> a = (1+2,3+4,5+6) C: 57 >>> a D: ERROR (3, 7, 11) E: I don’t know 10/8/19 Lists & Sequences 11

  12. Tuples and Expressions • Tuple parens () can • Execute the following: contain expressions >>> a = 5 >>> b = 7 • Called a tuple expression >>> x = (a, b, a+b) § Python must evaluate it § Evaluates each expression • What is x[2]? § Puts the value in tuple • Example: 12 >>> a = (1+2,3+4,5+6) >>> a (3, 7, 11) 10/8/19 Lists & Sequences 12

  13. Lists are Almost the Same as Tuples • x = [5, 6, 5, 9, 15, 23] Inside brackets , comma separated 0 1 2 3 4 5 5 6 5 9 15 23 • Can put anything in it • Access values with [] § [True, False] § x[0] is 5 § ['Hello’, 3] § x[4] is 15 • Expressions eval first § x[0:2] is (5,6) >>> [1+2, 4*2] § x[3:] is (9,15,23) [3, 8]

  14. Lists are Almost the Same as Tuples • x = [5, 6, 5, 9, 15, 23] Inside brackets , comma separated 0 1 2 3 4 5 5 6 5 9 15 23 • Can put anything in it • Access values with [] § [True, False] § x[0] is 5 § ['Hello’, 3] § x[4] is 15 • Expressions eval first § x[0:2] is (5,6) >>> [1+2, 4*2] § x[3:] is (9,15,23) But singletons are easier: [3] [3, 8]

  15. Lists Operations are the Same • Operation +: x 1 + x 2 • Operation in : x 1 in x 2 § [1,2] + [3,4] is [1,2,3,4] § 5 in [5,6,9] is True § [1,2] + [3] is [1,2,3] § 2 in [5,6,9] is False § [1,2] + [] is [1,2] § [5,6] in [5,6,9] is False • Functions same(ish) • Methods are same § len([1,2,3]) is 3 § [1,2,1].count(1) is 2 § list('abc') is ['a', 'b', 'c'] § [1,2,1].index(2) is 1

  16. List [] Can Contain Expressions • Called a list expression (just as with a tuple) § Python must evaluate it § Evaluates each expression § Puts the value in tuple • Example: >>> a = [1+2,3+4,5+6] Aren’t these redundant? >>> a [3, 7, 11] 10/8/19 Lists & Sequences 16

  17. List, Tuples, Strings are Similar • Strings, tuples, lists are all sequences § A classification of a group of types § Means a type that can be sliced • They are also all iterables § Means there is an order to the elements § Can access elements one at a time in order • But only lists are mutable § You can reach into the folder and change

  18. Representing Lists Wrong Correct x x [5, 6, 7, -2] id1 Unique tab identifier Variable id1 holds id 0 5 Does not allow two 1 7 vars to reference 2 4 same list object Put list in 3 -2 a “folder” x = [5, 7, 4,-2]

  19. List Assignment • x = [5, 7,4,-2] • Basic Syntax : 0 1 2 3 <var>[<index>] = <value> x 5 7 4 -2 § Reassign at index 8 § Affects folder contents • x[1] = 8 § Variable is unchanged id1 • Tuples cannot do this 0 5 x 8 § x = (5, 7, 4, -2) 1 7 x id1 2 § x[1] = 8 ERROR 4 3 -2 § Tuples are immutable

  20. When Do We Need to Draw a Folder? • When the value contains other values § This is essentially want we mean by ‘object’ • When the value is mutable Type Container? Mutable? int No No float No No str Yes* No Point3 Yes Yes RGB Yes Yes list Yes Yes 10/8/19 Lists & Sequences 20

  21. When Do We Need to Draw a Folder? • When the value contains other values § This is essentially want we mean by ‘object’ • When the value is mutable Type Container? Mutable? int No No tuples are a “grey area” float No No str Yes* No Point3 Yes Yes RGB Yes Yes list Yes Yes 10/8/19 Lists & Sequences 21

  22. List Variables are Object Variables >>> x = [5,6,5,9] x id2 >>> y = x y id2 >>> id(x) 4422305480 id2 >>> id(y) list 4422305480 0 5 x 8 >>> y[1] = 8 1 6 2 5 >>> x 3 9 [5,8,5,9]

  23. However, List Slices Make Copies x = [5, 6, 5, 9] y = x [1:3] x y id2 id3 id5 id6 list list 0 6 0 5 1 5 1 6 2 5 3 9 copy = new folder

  24. This is Why Lists are Advanced! • You must pay close attention to the folder § Sometimes have a copy, sometimes do not § Do not always want to modify the original § Reason degenerate slicing is useful: x[:] • If in doubt use the Python Tutor § Lists are a major reason it is so useful • But need to learn to work without

  25. Lists Share Methods with Tuple x = [5, 6, 5, 9, 15, 23] • index(value) These are § Return position of the value immutable § ERROR if value is not there methods § x.index(9) evaluates to 3 • count(value) § Returns number of times value appears in list § x.count(5) evaluates to 2

  26. List Methods Can Alter the List x = [5, 6, 5, 9] • append(value) § A procedure method , not a fruitful method § Adds a new value to the end of list § x.append(-1) changes the list to [5, 6, 5, 9, -1] • insert(index, value) § Put the value into list at index; shift rest of list right § x.insert(2,-1) changes the list to [5, 6, -1, 5, 9,] • sort() What do you think this does?

  27. Where To Learn About List Methods? In the documentation!

  28. Recall: Mutable Functions • A mutable function alters an object parameter § Often a procedure; no return value § Possible because folders persist outside frame • Lists are mutable objects too! § So we can make functions to alter them § One of main reasons to use lists over tuples • Often for matters of efficiency § Changing a tuple requires a complete copy § Expensive if the tuple is large

  29. Lists and Functions: Swap 1. def swap(b, h, k): Swaps b[h] and b[k], 2. """ Swaps b[h] and b[k] in b because parameter b Precond : b is a mutable list, 3. contains name of list. 4. h, k are valid positions""" 5. temp= b[h] id4 6. b[h]= b[k] 0 5 swap 5 7. b[k]= temp 1 4 b id4 h 3 2 7 3 6 swap(x, 3, 4) k 4 4 5 x id4 10/8/19 Lists & Sequences 29

  30. Lists and Functions: Swap 1. def swap(b, h, k): Swaps b[h] and b[k], 2. """ Swaps b[h] and b[k] in b because parameter b Precond : b is a mutable list, 3. contains name of list. 4. h, k are valid positions""" 5. temp= b[h] id4 6. b[h]= b[k] 0 5 swap 6 7. b[k]= temp 1 4 b id4 h 3 2 7 3 6 swap(x, 3, 4) temp 6 k 4 4 5 x id4 10/8/19 Lists & Sequences 30

Recommend


More recommend