lecture 14 - cs.cornell.edu · announcements for this lecture readings • today: chapter 11 •...

23
More with Sequences Lecture 14

Upload: others

Post on 30-May-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

More with Sequences

Lecture 14

Page 2: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Announcements for This Lecture

Readings• Today: Chapter 11• Next Week: Sec. 5.8-5.10

Assignments• A3 is due tomorrow

§ Turn in before you leave• Opportunities for help

§ Consultants 4:30-9:30§ Wil has OH 9-10, Fri§ Max has OH 1-2, Fri

• Survey is posted in CMS§ Due on day of exam

• A4 posted after the exam

10/8/15 More Sequences 2

• Prelim, Oct 15th 7:30-9:00§ Material up to TUESDAY§ Study guide is posted

• Review session Wednesday§ Still checking place/time§ Announcement on Piazza

Page 3: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Processing Lists: builtins

• sum(x) adds up all the elements in the list x§ They must all be numbers!

• min(x) or max(x) find the min/max value in list x§ They use the same ordering as sort()

• range(a,b,c) produces [a,a+c,a+2*c,…,a+c*((b-a)/c)]§ Starts at a, increases by c each time, until b (or less)§ The argument c is optional; c = 1 by default

• list(x) converts x (such as a string) to a list§ Example: list('mimsy') produces ['m', 'i', 'm', 's', 'y']

10/8/15 More Sequences 3

Page 4: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

The Map Function

• map(⟨function⟩, ⟨list⟩)§ Function has to have

exactly 1 parameter§ Otherwise, get an error§ Returns a new list

• Does the same thing asdef map(f,x):

result = [] # empty listfor y in x:

result.append(f(y))return result

10/8/15 More Sequences 4

map(f, x)

[f(x[0]), f(x[1]), …, f(x[n–1])]

calls the function fonce for each item

map(len, ['a', 'bc', 'defg'])returns [1, 2, 4]

Page 5: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Lists of Objects

• List positions are variables§ Can store base types§ But cannot store folders§ Can store folder identifiers

• Folders linking to folders§ Top folder for the list§ Other folders for contents

• Example:>>> r = colormodel.RED>>> b = colormodel.BLUE>>> g = colormodel.GREEN>>> x = [r,b,g]

10/8/15 More Sequences 5

id10

red 255

green 0

blue 0

RGB id11

red 0

green 255

blue 0

RGB

id12

red 0

green 0

blue 255

RGB

id13x

id13

x[0]x[1]x[2]

id10id11id12

list

id12g

id11b

id10r

Page 6: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Lists of Objects

• List positions are variables§ Can store base types§ But cannot store folders§ Can store folder identifiers

• Folders linking to folders§ Top folder for the list§ Other folders for contents

• Example:>>> r = colormodel.RED>>> b = colormodel.BLUE>>> g = colormodel.GREEN>>> x = [r,b,g]

10/8/15 More Sequences 6

id10

red 255

green 0

blue 0

RGB id11

red 0

green 255

blue 0

RGB

id12

red 0

green 0

blue 255

RGB

id13x

id13

x[0]x[1]x[2]

id10id11id12

list

id12g

id11b

id10r

Page 7: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Nested Lists

• Lists can hold any objects• Lists are objects• Therefore lists can hold other lists!

x = [1, [2, 1], [1, 4, [3, 1]], 5]x[0] x[1][1] x[2][2][1]x[2][0]

x[1] x[2] x[2][2]a = [2, 1]b = [3, 1]c = [1, 4, b]x = [1, a, c, 5]

10/8/15 More Sequences 7

Page 8: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Two Dimensional Lists

Table of Data Images

10/8/15 More Sequences 8

5 4 7 3

4 8 9 7

5 1 2 3

4 1 2 9

6 7 8 0

0 1 2 3

0

1

4

2

3

Store them as lists of lists (row-major order)d = [[5,4,7,3],[4,8,9,7],[5,1,2,3],[4,1,2,9],[6,7,8,0]]

0 1 2 3 4 5 6 7 8 9 10 1112

0123456789

101112

Each row, col has a value Each row, col has

an RGB value

Page 9: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Overview of Two-Dimensional Lists

• Access value at row 3, col 2:

d[3][2]

• Assign value at row 3, col 2:

d[3][2] = 8

• An odd symmetry

§ Number of rows of d: len(d)

§ Number of cols in row r of d: len(d[r])

10/8/15 More Sequences 9

5 4 7 3

4 8 9 7

5 1 2 3

4 1 2 9

6 7 8 0

d

0 1 2 3

01

4

2

3

Page 10: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

How Multidimensional Lists are Stored

• b = [[9, 6, 4], [5, 7, 7]]

• b holds name of a one-dimensional list§ Has len(b) elements§ Its elements are (the names of) 1D lists

• b[i] holds the name of a one-dimensional list (of ints) § Has len(b[i]) elements

10/8/15 More Sequences 10

id2

964

id3

577

id1

id2id3

id1b

9 6 45 7 7

Page 11: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Image Data: 2D Lists of Pixels

10/8/15 More Sequences 11

0 1 2 3 4 5 6 7 8 9 10 1112

0123456789

101112

id1b id1

id2id3

list

id2

id23id24

list

id23

red 255

green 255

blue 255

RGB

b[0][0] is a white pixel

Page 12: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Ragged Lists: Rows w/ Different Length

10/8/15 More Sequences 12

• b = [[17,13,19],[28,95]]

• Will see applications of this later

id2

171319

id3

2895

id1id1b

id2id3

012

1 10

0

Page 13: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Slices and Multidimensional Lists

• Only “top-level” list is copied.• Contents of the list are not altered• b = [[9, 6], [4, 5], [7, 7]]

10/8/15 More Sequences 13

id2

96

id1

id2id3

id1b

id4

id3

45id4

77

x = b[:2]

id5x

id5

id2id3

Page 14: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Slices and Multidimensional Lists

• Only “top-level” list is copied.• Contents of the list are not altered• b = [[9, 6], [4, 5], [7, 7]]

10/8/15 More Sequences 14

id2

96

id1

id2id3

id1b

id4

id3

45id4

77

x = b[:2]

id5x

id5

id2id3

Page 15: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Slices and Multidimensional Lists

• Create a nested list>>> b = [[9,6],[4,5],[7,7]]

• Get a slice>>> x = b[:2]

• Append to a row of x>>> x[1].append(10)

• x now has nested list[[9, 6], [4, 5, 10]]

• What are the contents of the list (with name) in b?

10/8/15 More Sequences 15

A: [[9,6],[4,5],[7,7]]B: [[9,6],[4,5,10]]C: [[9,6],[4,5,10],[7,7]]D: [[9,6],[4,10],[7,7]]E: I don’t know

Page 16: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Slices and Multidimensional Lists

• Create a nested list>>> b = [[9,6],[4,5],[7,7]]

• Get a slice>>> x = b[:2]

• Append to a row of x>>> x[1].append(10)

• x now has nested list[[9, 6], [4, 5, 10]]

• What are the contents of the list (with name) in b?

10/8/15 More Sequences 16

A: [[9,6],[4,5],[7,7]]B: [[9,6],[4,5,10]]C: [[9,6],[4,5,10],[7,7]]D: [[9,6],[4,10],[7,7]]E: I don’t know

Page 17: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Functions and 2D Lists

def transpose(table):"""Returns: copy of table with rows and columns swappedPrecondition: table is a (non-ragged) 2d List"""numrows = len(table)numcols = len(table[0]) # All rows have same no. colsresult = [] # Result accumulator for m in range(numcols):

row = [] # Single row accumulatorfor n in range(numrows):

row.append(table[n][m]) # Build up rowresult.append(row) # Add result to table

return result

10/8/15 More Sequences 17

1 2

3 4

5 6

1 3 5

2 4 6

Page 18: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Dictionaries (Type dict)

Description

• List of key-value pairs§ Keys are unique§ Values need not be

• Example: net-ids§ net-ids are unique (a key)§ names need not be (values)§ js1 is John Smith (class ’13)§ js2 is John Smith (class ’16)

• Many other applications

Python Syntax

• Create with format:{k1:v1, k2:v2, …}

• Keys must be non-mutable§ ints, floats, bools, strings§ Not lists or custom objects

• Values can be anything• Example:

d = {'js1':'John Smith','js2':'John Smith','wmw2':'Walker White'}

10/8/15 More Sequences 18

Page 19: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Using Dictionaries (Type dict)

• Access elts. like a list§ d['js1'] evaluates to 'John'§ But cannot slice ranges!

• Dictionaries are mutable§ Can reassign values§ d['js1'] = 'Jane'§ Can add new keys§ d['aa1'] = 'Allen'§ Can delete keys§ del d['wmw2']

d = {'js1':'John','js2':'John','wmw2':'Walker'}

10/8/15 More Sequences 19

'wmw2'

id8

'John'

'John'

'Walker'

dict

'js2'

'js1'

Key-Value order in folder is not important

id8d

Page 20: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Using Dictionaries (Type dict)

• Access elts. like a list§ d['js1'] evaluates to 'John'§ But cannot slice ranges!

• Dictionaries are mutable§ Can reassign values§ d['js1'] = 'Jane'§ Can add new keys§ d['aa1'] = 'Allen'§ Can delete keys§ del d['wmw2']

d = {'js1':'John','js2':'John','wmw2':'Walker'}

10/8/15 More Sequences 20

'wmw2'

id8

'John' 'Jane'

'John'

'Walker'

dict

'js2'

'js1'

Key-Value order in folder is not important

id8d

Page 21: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Using Dictionaries (Type dict)

• Access elts. like a list§ d['js1'] evaluates to 'John'§ But cannot slice ranges!

• Dictionaries are mutable§ Can reassign values§ d['js1'] = 'Jane'§ Can add new keys§ d['aa1'] = 'Allen'§ Can delete keys§ del d['wmw2']

d = {'js1':'John','js2':'John','wmw2':'Walker'}

10/8/15 More Sequences 21

'wmw2'

id8

'Jane'

'John'

'Walker'

dict

'js2'

'js1'

'aa1' 'Allen'

id8d

Page 22: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Using Dictionaries (Type dict)

• Access elts. like a list§ d['js1'] evaluates to 'John'§ But cannot slice ranges!

• Dictionaries are mutable§ Can reassign values§ d['js1'] = 'Jane'§ Can add new keys§ d['aa1'] = 'Allen'§ Can delete keys§ del d['wmw2']

d = {'js1':'John','js2':'John','wmw2':'Walker'}

10/8/15 More Sequences 22

'wmw2'

id8

'Jane'

'John'

'Walker'

dict

'js2'

'js1'

'aa1' 'Allen'✗ ✗

Deleting key deletes both

id8d

Page 23: Lecture 14 - cs.cornell.edu · Announcements for This Lecture Readings • Today: Chapter 11 • Next Week: Sec. 5.8-5.10 Assignments • A3 is due tomorrow! Turn in before you leave

Dictionaries and For-Loops

• Dictionaries != sequences§ Cannot slice them

• Different inside for loop § Loop variable gets the key§ Then use key to get value

• Has methods to convertdictionary to a sequence§ Seq of keys: d.keys()§ Seq of values: d.values()§ key-value pairs: d.items()

for k in d:# Loops over keysprint k # keyprint d[k] # value

# To loop over values onlyfor v in d.values():

print v # value

10/8/15 More Sequences 23

See grades.py