Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and...

33
Lecture 10: Lists and Sequences (Sections 10.0-10.2, 10.4-10.6, 10.8-10.13) CS 1110 Introduction to Computing Using Python [E. Andersen, A. Bracy, D. Gries, L. Lee, S. Marschner, C. Van Loan, W. White] http://www.cs.cornell.edu/courses/cs1110/2018sp

Transcript of Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and...

Page 1: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Lecture 10: Lists and Sequences

(Sections 10.0-10.2, 10.4-10.6, 10.8-10.13)CS 1110

Introduction to Computing Using Python

[E. Andersen, A. Bracy, D. Gries, L. Lee, S. Marschner, C. Van Loan, W. White]

http://www.cs.cornell.edu/courses/cs1110/2018sp

Page 2: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Lecture 10 Announcements

• Last call for a one-on-one! § CMS: OPTIONAL: one-on-ones

• Prelim 1 is March 13. LAST DAY to register a conflict or a need for accommodation. See website: http://www.cs.cornell.edu/courses/cs1110/2018sp/exams/index.php

• CMS: Prelim 1 conflicts• A1 Revisions: open from Mar 1st thru Mar 7,

11:59pm. 1 just means “not done”. many people got a 1 due to test cases.

2

Page 3: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Lecture 10 Announcements

A2 is out and about!Handout provides links to worked examples of diagramming call frames, objects, variables, etc.Preparatory to starting A2:(a) immediately try those worked examples (b) go to office/consulting hours if you have any difficulty

This will make A2 go much smoother!3

Page 4: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Sequences: Lists of Values

Strings = • 'abc d'

Put characters in quotes•Use § \' for quote character

Access characters with []•s[0] § is 'a's[5]§ causes an errors[0:2] § is 'ab' (excludes c)s[2:] § is 'c d'

List• x = [5, 6, 5, 9, 15, 23]

• Put values inside [ ] § Separate by commas

• Access values with []§ x[0] is 5§ x[6] causes an error§ x[0:2] is [5, 6] (excludes 2nd 5)§ x[3:] is [9, 15, 23]

4

a b c d0 1 2 3 4

5 6 5 9 150 1 2 3 4

23 5

Sequence is a name we give to both

Page 5: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Lists Have Methods Similar to String

• <list>.index(<value>)§ Return position of the value§ ERROR if value is not there§ x.index(9) evaluates to 3

• <list>.count(<value>)§ Returns number of times value appears in list§ x.count(5) evaluates to 2

x = [5, 6, 5, 9, 15, 23] But to get the length of a list you use a function,

not a class method:

len(x)x.len()

5

Page 6: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

A Word about Testing

Suppose you hear a rumor that the count method is not implemented correctly.

Looks good to me!Are we done?

6

>>> lab_scores = [5, 6, 5, 9, 0, 10, 8, 0,7]>>> lab_scores.count(0)2

Page 7: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

What should I be testing?Common Cases: typical usage (see previous slide)Edge Cases: live at the boundaries

Target location in list:• first, middle, last elementsInput size: • 0,1,2, many (length of lists, strings, etc.)Input Orders:• max(big, small), max(small, big)…Element values:• negative/positive, zero, odd/evenElement types:• int, float, str, etc.Expected results:• negative, 0, 1, 2, manyNot all categories/cases apply to all functions.

Use your judgement!7

Page 8: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Things that Work for All Sequences

x = [5, 6, 9, 6, 15, 5]s = ‘slithy’

x.index(5) → 0x.count(6) → 2len(x) → 6x[4] → 15x[1:3] → [6, 9]x[3:] → [6, 15, 5]x[–2] → 15x + [1, 2] → [5, 6, 9, 6, 15, 5, 1, 2]x * 2 → [5, 6, 9, 6, 15, 5, 5, 6, 9, 6, 15, 5]15 in x → True

s.index(‘s’) → 0s.count(‘t’) → 1len(s) → 6s[4] → “h”s[1:3] → “li” s[3:] → “thy”s[–2] → “h”s + ‘ toves’ → “slithy toves”s * 2 → “slithyslithy”‘t’ in s → True

methods

built-in fns

slicingop

erat

ors

8

Page 9: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

id1

0123

574-2

list

Representing Lists

Wrong:

9

Correct:

x = [5, 7, 4,-2]

id1x5, 6, 7, -2x

Indices

Heap Space Global Space Global Space

Page 10: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Lists vs. Class ObjectsList

• Attributes are indexed§ Example: x[2]

ObjectsAttributes are named•

Example: § p.x

10

id2x id3

x 1

y 2

z 3

Point3id2

0123

574-2

listid3p

Heap Space Global Space Heap Space Global Space

Page 11: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Lists Can Hold Any Type

11

id1

0123

574-2

list

Heap Space

id2list_of_strings id2

0123

‘h’‘i’‘’‘there!’

list

list_of_integers = [5,7,4,-2]list_of_strings = [‘h’, ‘i’, ‘’, ‘there!’]

id1list_of_integers

Global Space

Page 12: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

No Really, Lists Can Hold Any Type!

12

id1list_of_points

id1

0123

id2id3id6id7

list

Heap Space

Global Space

x 81 y 2 z 3

id2Point3

x 6 y 2 z 3

id3Point3

x 4 y 4 z 3

id6Point3

x 1 y 2 z 2

id7Point3

id9list_of_various_types id9

0123

53.1416‘happy’id5

list

x 10 y 20 z 13

id5Point3

list_of_points = [Point3(81,2,3),Point3(6,2,3)…]

Page 13: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Lists of Objects• List elements are variables

§ Can store base types and ids§ Cannot store folders

13

id1p1Heap Space Global Space

x 1 y 2 z 3

id1Point3

id2p2

id3p3x 4 y 5 z 6

id2Point3

x 7 y 8 z 9

id3Point3

p1 = Point3(1, 2, 3)p2 = Point3(4, 5, 6)p3 = Point3(7, 8, 9)x = [p1,p2,p3]

id4

012

id1id2id3

list

id4x

How do I get this y?x[1].y

Page 14: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

id1

0123

574-2

list

List Assignment

Format• :<var>[<index>] = <value>

Reassign at index§

Affects folder contents§

Variable is unchanged§

Strings cannot do this•Strings are § immutable

x = [5, 7,4,-2]x[1] = 8s = “Hello!”s[0] = ‘J’TypeError: 'str' object does not support item assignment

id1x

x 8

Heap Space Global Space

“Hello!”s

Page 15: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

What do you think this does?

List Methods Can Alter the List

• <list>.append(<value>)§ Adds a new value to the end of list§ x.append(-1) changes the list to [5, 6, 5, 9, -1]

• <list>.insert(<index>,<value>)§ Puts value into list at index; shifts rest of list right§ x.insert(2,-1) changes the list to [5, 6, -1, 5, 9]

• <list>.sort()

x = [5, 6, 5, 9] See Python API for more

15

Page 16: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

1st Clicker Question

• Execute the following:>>> x = [5, 6, 5, 9, 10]>>> x[3] = -1>>> x.insert(1, 2)

• What is x[4]?

A: 10B: 9C: -1D: ERRORE: I don’t know

16

Page 17: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

1st Clicker Answer

• Execute the following:>>> x = [5, 6, 5, 9, 10]>>> x[3] = -1>>> x.insert(1, 2)

• What is x[4]?

A: 10B: 9C: -1D: ERRORE: I don’t know

17

CORRECT

id1

0123

5659

list

4 10

2

id1xHeap Space Global Space

x -1

(Original elements 1-4 are shifted down to be elements 2-5)

Page 18: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Recall: identifier assignment à no swap

18

import shapes

def swap(p, q):tmp = pp = qq = tmp

p = shapes.Point3(1,2,3)q = shapes.Point3(3,4,5)

swap(p, q)

At the end of swap: parameters p and q are swappedglobal p and q are unchanged

id6pHeap Space Global Space

x 1 y 2 z 3

id6Point3

id7q

x 3 y 4 z 5

id7Point3swap

p id7 q id6 tmp id6

RETURN NONE

Call Frame

Page 19: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Recall: Attribute Assignment à swap!

19

import shapes

def swap(p, q):tmp = p.xp.x = q.xq.x = tmp

p = shapes.Point3(1,2,3)q = shapes.Point3(3,4,5)

swap(p, q)

At the end of swap: parameters p and q are unchangedglobal p and q are unchanged, attributes x are swapped

id6pHeap Space Global Space

x 3 y 2 z 3

id6Point3

id7q

x 1 y 4 z 5

id7Point3swap

p id6 q id7 tmp 1

RETURN NONE

Call Frame

Page 20: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

2nd Clicker Question

def swap(b, h, k):"""Procedure swaps b[h] and b[k] in b

Precondition: b is a mutable list, h and k are valid positions in the list""”

temp= b[h]b[h]= b[k]b[k]= temp

x = [5,4,7,6,5]swap(x, 3, 4)print x[3]

id4x id4

20

1

2

3 0123

5476

4 5

What gets printed? A: 5B: 6C: Something elseD: I don’t know

Heap Space Global Space

Page 21: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

2nd Clicker Answer

def swap(b, h, k):"""Procedure swaps b[h] and b[k] in b

Precondition: b is a mutable list, h and k are valid positions in the list""”

temp= b[h]b[h]= b[k]b[k]= temp

x = [5,4,7,6,5]swap(x, 3, 4)print x[3]

id4x id4

21

1

2

3 0123

5476

4 5

What gets printed? A: 5B: 6C: Something elseD: I don’t know

Heap Space Global Space

CORRECT

Swaps b[h] and b[k], because parameter b contains name of list.

Page 22: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

2nd Clicker Explanation (1)

def swap(b, h, k):"""Procedure swaps b[h] and b[k] in b

Precondition: b is a mutable list, h and k are valid positions in the list""”

temp= b[h]b[h]= b[k]b[k]= temp

x = [5,4,7,6,5]swap(x, 3, 4)print x[3]

22

1

2

3

swap

b id4 h 3

k 4

1

id4x id4

0123

5476

4 5

Heap Space Global Space

Call Frame

Page 23: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

2nd Clicker Explanation (2)

def swap(b, h, k):"""Procedure swaps b[h] and b[k] in b

Precondition: b is a mutable list, h and k are valid positions in the list""”

temp= b[h]b[h]= b[k]b[k]= temp

x = [5,4,7,6,5]swap(x, 3, 4)print x[3]

23

1

2

3

swap

b id4 h 3

k 4

2

id4x id4

0123

5476

4 5

Heap Space Global Space

Call Frame

temp 6

Page 24: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

2nd Clicker Explanation (3)

def swap(b, h, k):"""Procedure swaps b[h] and b[k] in b

Precondition: b is a mutable list, h and k are valid positions in the list""”

temp= b[h]b[h]= b[k]b[k]= temp

x = [5,4,7,6,5]swap(x, 3, 4)print x[3]

24

1

2

3

swap

b id4 h 3

k 4

3

id4x id4

0123

5476

4 5

Heap Space Global Space

Call Frame

temp 6

5✗

Page 25: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

2nd Clicker Explanation (4)

def swap(b, h, k):"""Procedure swaps b[h] and b[k] in b

Precondition: b is a mutable list, h and k are valid positions in the list""”

temp= b[h]b[h]= b[k]b[k]= temp

x = [5,4,7,6,5]swap(x, 3, 4)print x[3]

25

1

2

3

swap

b id4 h 3

k 4

id4x id4

0123

5476

4 5

Heap Space Global Space

Call Frame

temp 6

RETURN

5✗

None

6✗

Page 26: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

List Slices Make Copies

26

x = [5, 6, 5, 9]y = x[1:3] id5x id5

0123

5659

listid6y

id6

01

65

listcopy means new folder

Heap Space Global Space

Page 27: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

3rd Clicker Question

27

Execute the following:•>>> x = [5, 6, 5, 9, 10]>>> y = x[1:]>>> y[0] = 7

What is x[1]?•

A: 7B: 5C: 6D: ERRORE: I don’t know

Page 28: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

3rd Clicker Answer

28

• Execute the following:>>> x = [5, 6, 5, 9, 10]>>> y = x[1:]>>> y[0] = 7

• What is x[1]?

A: 7B: 5C: 6D: ERRORE: I don’t know

CORRECT

id5x id5

0123

5659

list

4 10

id6y

Heap Space Global Space

id6

0123

659

list

10

7✗

Page 29: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

4th Clicker Question

29

A: 7B: 5C: 6D: ERRORE: I don’t know

Execute the following:•>>> x = [5, 6, 5, 9, 10]>>> y = x>>> y[1] = 7

What is • x[1]?

Page 30: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

4th Clicker Answer

30

A: 7B: 5C: 6D: ERRORE: I don’t know

• Execute the following:>>> x = [5, 6, 5, 9, 10]>>> y = x>>> y[1] = 7

• What is x[1]?

CORRECT

id5x id5

0123

5659

list

4 10

id5y

Heap Space Global Space

7✗

Page 31: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Lists and Expressions / 5th Clicker Q

• List brackets [] can contain expressions

• This is a list expression§ Python must evaluate it§ Evaluates each expression§ Puts the value in the list

• Example:>>> a = [1+2,3+4,5+6]>>> a[3, 7, 11]

Execute the following:•>>> a = 5>>> b = 7>>> x = [a, b, a+b]

What is x[2]?•

31

A: 'a+b'B: 12C: 57D: ERRORE: I don’t know

Page 32: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Lists and Expressions / 5th Clicker A

• Execute the following:>>> a = 5>>> b = 7>>> x = [a, b, a+b]

• What is x[2]?

32

A: 'a+b'B: 12C: 57D: ERRORE: I don’t know

CORRECT

5a id5

012

5712

list7b

Heap Space Global Space

id5x

Page 33: Lecture 10: Lists and Sequences - Cornell University · Lecture 10 Announcements A2 is out and about! Handout provides links to worked examples of diagramming call frames, objects,

Lists and Strings Go Hand in Hand

>>> text = 'A sentence is just\n a list of words'>>> words = text.split()>>> words['A', 'sentence', 'is', 'just', 'a', 'list', 'of', 'words']>>> lines = text.split('\n')>>> lines['A sentence is just', ' a list of words']>>> hyphenated = '-'.join(words)>>> hyphenated'A-sentence-is-just-a-list-of-words'>>> hyphenated2 = '-'.join(lines[0].split()+lines[1].split())>>> hyphenated2'A-sentence-is-just-a-list-of-words'

text.split(<sep>): return a list of words in text (separated by <sep>, or whitespace by default)

<sep>.join(words): concatenate the items in the list of strings words, separated by <sep>.

Turns string into a list of words

Turns string into a list of lines

Combines elements with hyphens

Merges 2 lists, combines elements with hyphens