lists (& sequences) · representing lists wrong correct 9/19/16 lists & sequences 7 x = [5,...

35
Lists (& Sequences) Lecture 7

Upload: others

Post on 25-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Lists (& Sequences)

Lecture 7

Page 2: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Announcements For This Lecture

Readings• Chapter 10 (lists)• Fri will cover for-loops

Assignment 1• Due Thursday

§ Due before midnight§ Submit something…

§ Can resubmit to Sep. 30

• Grades posted Sat/Sun• Complete the Survey

§ Must answer individually

29/19/16 Lists & Sequences

Page 3: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Sequences: Lists of Values

String

• s = 'abc d'

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

• Access characters with []§ s[0] is 'a'§ s[5] causes an error§ s[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]

9/19/16 Lists & Sequences 3

a b c d

0 1 2 3 4

5 6 5 9 15

0 1 2 3 4

23

5

Page 4: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Sequences: Lists of Values

String

• s = 'abc d'

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

• Access characters with []§ s[0] is 'a'§ s[5] causes an error§ s[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]

9/19/16 Lists & Sequences 4

a b c d

0 1 2 3 4

5 6 5 9 15

0 1 2 3 4

23

5

Page 5: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Lists Have Methods Similar to Strings

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

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

9/19/16 Lists & Sequences 5

x = [5, 6, 5, 9, 15, 23]But you get length of a list with a regular

function, not method:

len(x)

Page 6: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Representing Lists

Wrong Correct

9/19/16 Lists & Sequences 6

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

id1x

id10123

574-2

5, 6, 7, -2x

Page 7: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Representing Lists

Wrong Correct

9/19/16 Lists & Sequences 7

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

id1x

id10123

574-2

5, 6, 7, -2x

Box is “too small” to hold the list

Page 8: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Representing Lists

Wrong Correct

9/19/16 Lists & Sequences 8

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

id1x

id10123

574-2

5, 6, 7, -2x

Box is “too small” to hold the list

Put list in a “folder”

Page 9: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Representing Lists

Wrong Correct

9/19/16 Lists & Sequences 9

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

id1x

id10123

574-2

5, 6, 7, -2x

Box is “too small” to hold the list

Put list in a “folder”

Unique tabidentifier

Page 10: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Representing Lists

Wrong Correct

9/19/16 Lists & Sequences 10

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

id1x

id10123

574-2

5, 6, 7, -2x

Box is “too small” to hold the list

Put list in a “folder”

Unique tabidentifier

Variableholds id

Page 11: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Modifying List Contents

• List assignment:<var>[<index>] = <value>§ Reassign at index§ Affects folder contents§ Variable is unchanged

• Strings cannot do this§ s = 'Hello World!'§ s[0] = 'J' ERROR§ String are immutable

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

• x[1] = 8

9/19/16 Lists & Sequences 11

-2

0 1 2 3

475

id1x

id10123

574-2

Page 12: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Modifying List Contents

• List assignment:<var>[<index>] = <value>§ Reassign at index§ Affects folder contents§ Variable is unchanged

• Strings cannot do this§ s = 'Hello World!'§ s[0] = 'J' ERROR§ String are immutable

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

• x[1] = 8

9/19/16 Lists & Sequences 12

-2

0 1 2 3

475

id1x

id10123

574-2

8

x

x 8

Page 13: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Exercise: List Assignment• Assignment copies id into y

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

• Execute the assignments:>>> x[2] = 8>>> y[2] = 3

• What is value of x[2]?

9/19/16 Lists & Sequences 13

id1x id1y

A: 8B: 3C: id1D: I don’t know

id1

0123

574-2

Page 14: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Exercise: List Assignment• Assignment copies id into y

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

• Execute the assignments:>>> x[2] = 8>>> y[2] = 3

• What is value of x[2]?

9/19/16 Lists & Sequences 14

id1x id1y

A: 8B: 3C: id1D: I don’t know

id1

0123

574-2x 8

CORRECT

Page 15: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Exercise: List Assignment• Assignment copies id into y

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

• Execute the assignments:>>> x[2] = 8>>> y[2] = 3

• What is value of x[2]?

9/19/16 Lists & Sequences 15

id1x id1y

A: 8B: 3C: id1D: I don’t know

id1

0123

574-2x 8 3x

CORRECT

Page 16: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

List Methods Can Alter the List

• 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?9/19/16 Lists & Sequences 16

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

Page 17: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Lists and Functions: Swap

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

swap(x, 3, 4)

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

id4

x id49/19/16 17Lists & Sequences

1

2

3 swap

b id4 h 3

k 4

1 0123

5476

4 5

Page 18: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Lists and Functions: Swap

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

swap(x, 3, 4)

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

id4

x id49/19/16 18Lists & Sequences

1

2

3 swap

b id4 h 3

k 4

2

temp 6

0123

5476

4 5

Page 19: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Lists and Functions: Swap

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

swap(x, 3, 4)

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

id4

x id49/19/16 19Lists & Sequences

1

2

3 swap

b id4 h 3

k 4

3

temp 6

0123

5476

4 55x

Page 20: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Lists and Functions: Swap

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

swap(x, 3, 4)

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

id4

x id49/19/16 20Lists & Sequences

1

2

3 swap

b id4 h 3

k 4temp 6

0123

5476

4 55x6x

Page 21: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Lists and Functions: Swap

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

swap(x, 3, 4)

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

id4

x id49/19/16 21Lists & Sequences

1

2

3 0123

5476

4 55x6x

Page 22: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Lists and Functions: Swap

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

swap(x, 3, 4)

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

id4

x id49/19/16 22Lists & Sequences

1

2

3

Frame is erased, but folder is not 0

123

5476

4 55x6x

Page 23: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

List Slices Make Copies

9/19/16 Lists & Sequences 23

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

id5x

id5

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

5659

list

id6y

id6

y[0]y[1]

65

list

copy = new folder

Page 24: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Exercise Time

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

• What is x[4]?

9/19/16 Lists & Sequences 24

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

Page 25: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Exercise Time

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

• What is x[4]?

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

• What is x[1]?

9/19/16 Lists & Sequences 25

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

Page 26: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Exercise Time

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

• What is x[4]?

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

• What is x[1]?

9/19/16 Lists & Sequences 26

-1 6

Page 27: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Lists and Expressions

• 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]?

9/19/16 Lists & Sequences 27

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

Page 28: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Lists and Expressions

• 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]?

9/19/16 Lists & Sequences 28

12

Page 29: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

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]

9/19/16 Lists & Sequences 29

Page 30: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Two Dimensional Lists

Table of Data Images

9/19/16 Lists & Sequences 30

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 101112

0123456789101112

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

an color value

Page 31: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

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])

9/19/16 Lists & Sequences 31

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 32: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

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

9/19/16 Lists & Sequences 32

id2

964

id3

577

id1

id2id3

id1b

9 6 45 7 7

Page 33: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Ragged Lists: Rows w/ Different Length

9/19/16 Lists & Sequences 33

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

• Will see applications of this later

id2

171319

id3

2895

id1id1b

id2id3

012

1 10

0

Page 34: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

Slices and Multidimensional Lists

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

9/19/16 Lists & Sequences 34

id2

96

id1

id2id3

id1b

id4

id3

45id4

77

x = b[:2]

id5x

id5

id2id3

Page 35: Lists (& Sequences) · Representing Lists Wrong Correct 9/19/16 Lists & Sequences 7 x = [5, 7, 4,-2] x id1 id1 0 1 2 3 5 7 4-2 x 5, 6, 7, -2 Box is “too small” to hold the list

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?

9/19/16 Lists & Sequences 35

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