cs 61a lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · working with lists >>>...

87
CS 61A Lecture 10

Upload: others

Post on 15-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

CS 61A Lecture 10

Page 2: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Announcements

Page 3: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Lists

['Demo']

Page 4: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

4

Page 5: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

Page 6: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 7: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

The number of elements

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 8: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

The number of elements>>> len(digits) 4

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 9: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

The number of elements>>> len(digits) 4

An element selected by its index

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 10: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

The number of elements>>> len(digits) 4

An element selected by its index>>> digits[3] 8

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 11: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

The number of elements>>> len(digits) 4

An element selected by its index>>> digits[3] 8

>>> getitem(digits, 3) 8

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 12: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

The number of elements>>> len(digits) 4

An element selected by its index>>> digits[3] 8

Concatenation and repetition

>>> getitem(digits, 3) 8

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 13: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

The number of elements>>> len(digits) 4

An element selected by its index>>> digits[3] 8

>>> [2, 7] + digits * 2 [2, 7, 1, 8, 2, 8, 1, 8, 2, 8]

Concatenation and repetition

>>> getitem(digits, 3) 8

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 14: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

The number of elements>>> len(digits) 4

An element selected by its index>>> digits[3] 8

>>> [2, 7] + digits * 2 [2, 7, 1, 8, 2, 8, 1, 8, 2, 8]

Concatenation and repetition

>>> getitem(digits, 3) 8

>>> add([2, 7], mul(digits, 2)) [2, 7, 1, 8, 2, 8, 1, 8, 2, 8]

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 15: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

The number of elements>>> len(digits) 4

An element selected by its index>>> digits[3] 8

Nested lists

>>> [2, 7] + digits * 2 [2, 7, 1, 8, 2, 8, 1, 8, 2, 8]

Concatenation and repetition

>>> getitem(digits, 3) 8

>>> add([2, 7], mul(digits, 2)) [2, 7, 1, 8, 2, 8, 1, 8, 2, 8]

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 16: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Working with Lists

>>> digits = [1, 8, 2, 8]

4

The number of elements>>> len(digits) 4

An element selected by its index>>> digits[3] 8

Nested lists>>> pairs = [[10, 20], [30, 40]] >>> pairs[1] [30, 40] >>> pairs[1][0] 30

>>> [2, 7] + digits * 2 [2, 7, 1, 8, 2, 8, 1, 8, 2, 8]

Concatenation and repetition

>>> getitem(digits, 3) 8

>>> add([2, 7], mul(digits, 2)) [2, 7, 1, 8, 2, 8, 1, 8, 2, 8]

>>> digits = [2//2, 2+2+2+2, 2, 2*2*2]

Page 17: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Containers

Page 18: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Containers

6

Page 19: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Containers

Built-in operators for testing whether an element appears in a compound value

6

Page 20: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Containers

Built-in operators for testing whether an element appears in a compound value

6

>>> digits = [1, 8, 2, 8]

Page 21: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Containers

Built-in operators for testing whether an element appears in a compound value

6

>>> digits = [1, 8, 2, 8]>>> 1 in digitsTrue

Page 22: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Containers

Built-in operators for testing whether an element appears in a compound value

6

>>> digits = [1, 8, 2, 8]>>> 1 in digitsTrue>>> 8 in digitsTrue

Page 23: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Containers

Built-in operators for testing whether an element appears in a compound value

6

>>> digits = [1, 8, 2, 8]>>> 1 in digitsTrue>>> 8 in digitsTrue>>> 5 not in digitsTrue

Page 24: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Containers

Built-in operators for testing whether an element appears in a compound value

6

>>> digits = [1, 8, 2, 8]>>> 1 in digitsTrue>>> 8 in digitsTrue>>> 5 not in digitsTrue>>> not(5 in digits)True

Page 25: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Containers

Built-in operators for testing whether an element appears in a compound value

6

>>> digits = [1, 8, 2, 8]>>> 1 in digitsTrue>>> 8 in digitsTrue>>> 5 not in digitsTrue>>> not(5 in digits)True

(Demo)

Page 26: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

For Statements

(Demo)

Page 27: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Sequence Iteration

8

Page 28: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Sequence Iteration

def count(s, value): total = 0 for element in s:

if element == value: total = total + 1 return total

8

Page 29: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Sequence Iteration

def count(s, value): total = 0 for element in s:

if element == value: total = total + 1 return total

Name bound in the first frame of the current environment

(not a new frame)

8

Page 30: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

For Statement Execution Procedure

9

Page 31: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

For Statement Execution Procedure

for <name> in <expression>: <suite>

9

Page 32: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

For Statement Execution Procedure

for <name> in <expression>: <suite>

1. Evaluate the header <expression>, which must yield an iterable value (a sequence)

9

Page 33: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

For Statement Execution Procedure

for <name> in <expression>: <suite>

1. Evaluate the header <expression>, which must yield an iterable value (a sequence)

2. For each element in that sequence, in order:

9

Page 34: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

For Statement Execution Procedure

for <name> in <expression>: <suite>

1. Evaluate the header <expression>, which must yield an iterable value (a sequence)

2. For each element in that sequence, in order:

A. Bind <name> to that element in the current frame

9

Page 35: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

For Statement Execution Procedure

for <name> in <expression>: <suite>

1. Evaluate the header <expression>, which must yield an iterable value (a sequence)

2. For each element in that sequence, in order:

A. Bind <name> to that element in the current frame

B. Execute the <suite>

9

Page 36: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Sequence Unpacking in For Statements

10

Page 37: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Sequence Unpacking in For Statements

>>> pairs = [[1, 2], [2, 2], [3, 2], [4, 4]]

>>> same_count = 0

10

Page 38: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Sequence Unpacking in For Statements

>>> pairs = [[1, 2], [2, 2], [3, 2], [4, 4]]

>>> same_count = 0

A sequence of fixed-length sequences

10

Page 39: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Sequence Unpacking in For Statements

>>> pairs = [[1, 2], [2, 2], [3, 2], [4, 4]]

>>> same_count = 0

>>> for x, y in pairs: ... if x == y: ... same_count = same_count + 1

>>> same_count 2

A sequence of fixed-length sequences

10

Page 40: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Sequence Unpacking in For Statements

>>> pairs = [[1, 2], [2, 2], [3, 2], [4, 4]]

>>> same_count = 0

>>> for x, y in pairs: ... if x == y: ... same_count = same_count + 1

>>> same_count 2

A sequence of fixed-length sequences

A name for each element in a fixed-length sequence

10

Page 41: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Sequence Unpacking in For Statements

>>> pairs = [[1, 2], [2, 2], [3, 2], [4, 4]]

>>> same_count = 0

>>> for x, y in pairs: ... if x == y: ... same_count = same_count + 1

>>> same_count 2

A sequence of fixed-length sequences

A name for each element in a fixed-length sequence

Each name is bound to a value, as in multiple assignment

10

Page 42: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Ranges

Page 43: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

The Range Type

A range is a sequence of consecutive integers.*

12

Page 44: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

The Range Type

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.12

Page 45: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.12

Page 46: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.

range(-2, 2)

12

Page 47: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.

range(-2, 2)

12

Page 48: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.

range(-2, 2)

12

Page 49: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.

range(-2, 2)

12

Page 50: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.

range(-2, 2)

Length: ending value - starting value

12

Page 51: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.

range(-2, 2)

Length: ending value - starting value

Element selection: starting value + index

12

Page 52: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

>>> list(range(-2, 2)) [-2, -1, 0, 1]

>>> list(range(4)) [0, 1, 2, 3]

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.

range(-2, 2)

Length: ending value - starting value

Element selection: starting value + index

12

Page 53: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

>>> list(range(-2, 2)) [-2, -1, 0, 1]

>>> list(range(4)) [0, 1, 2, 3]

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.

range(-2, 2)

Length: ending value - starting value

Element selection: starting value + index

List constructor

12

Page 54: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

>>> list(range(-2, 2)) [-2, -1, 0, 1]

>>> list(range(4)) [0, 1, 2, 3]

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.

range(-2, 2)

Length: ending value - starting value

Element selection: starting value + index

List constructor

Range with a 0 starting value

12

Page 55: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...

The Range Type

>>> list(range(-2, 2)) [-2, -1, 0, 1]

>>> list(range(4)) [0, 1, 2, 3]

A range is a sequence of consecutive integers.*

* Ranges can actually represent more general integer sequences.

range(-2, 2)

Length: ending value - starting value

Element selection: starting value + index

List constructor

Range with a 0 starting value

(Demo)

12

Page 56: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

Page 57: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'm', 'n', 'o', 'p']>>> [letters[i] for i in [3, 4, 6, 8]]

Page 58: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'm', 'n', 'o', 'p']>>> [letters[i] for i in [3, 4, 6, 8]]

['d', 'e', 'm', 'o']

Page 59: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

14

Page 60: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

[<map exp> for <name> in <iter exp> if <filter exp>]

14

Page 61: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

[<map exp> for <name> in <iter exp> if <filter exp>]

Short version: [<map exp> for <name> in <iter exp>]

14

Page 62: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

[<map exp> for <name> in <iter exp> if <filter exp>]

Short version: [<map exp> for <name> in <iter exp>]

A combined expression that evaluates to a list using this evaluation procedure:

14

Page 63: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

[<map exp> for <name> in <iter exp> if <filter exp>]

Short version: [<map exp> for <name> in <iter exp>]

A combined expression that evaluates to a list using this evaluation procedure:

1. Add a new frame with the current frame as its parent

14

Page 64: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

[<map exp> for <name> in <iter exp> if <filter exp>]

Short version: [<map exp> for <name> in <iter exp>]

A combined expression that evaluates to a list using this evaluation procedure:

1. Add a new frame with the current frame as its parent

2. Create an empty result list that is the value of the expression

14

Page 65: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

[<map exp> for <name> in <iter exp> if <filter exp>]

Short version: [<map exp> for <name> in <iter exp>]

A combined expression that evaluates to a list using this evaluation procedure:

1. Add a new frame with the current frame as its parent

2. Create an empty result list that is the value of the expression

3. For each element in the iterable value of <iter exp>:

14

Page 66: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

[<map exp> for <name> in <iter exp> if <filter exp>]

Short version: [<map exp> for <name> in <iter exp>]

A combined expression that evaluates to a list using this evaluation procedure:

1. Add a new frame with the current frame as its parent

2. Create an empty result list that is the value of the expression

3. For each element in the iterable value of <iter exp>:

A. Bind <name> to that element in the new frame from step 1

14

Page 67: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

List Comprehensions

[<map exp> for <name> in <iter exp> if <filter exp>]

Short version: [<map exp> for <name> in <iter exp>]

A combined expression that evaluates to a list using this evaluation procedure:

1. Add a new frame with the current frame as its parent

2. Create an empty result list that is the value of the expression

3. For each element in the iterable value of <iter exp>:

A. Bind <name> to that element in the new frame from step 1

B. If <filter exp> evaluates to a true value, then add the value of <map exp> to the result list

14

Page 68: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Strings

Page 69: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Strings are an Abstraction

16

Page 70: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Strings are an Abstraction

Representing data:

'200' '1.2e-5' 'False' '[1, 2]'

16

Page 71: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Strings are an Abstraction

Representing data:

'200' '1.2e-5' 'False' '[1, 2]'

Representing language:

"""And, as imagination bodies forth The forms of things to unknown, and the poet's pen Turns them to shapes, and gives to airy nothing A local habitation and a name. """

16

Page 72: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Strings are an Abstraction

Representing data:

'200' '1.2e-5' 'False' '[1, 2]'

Representing language:

"""And, as imagination bodies forth The forms of things to unknown, and the poet's pen Turns them to shapes, and gives to airy nothing A local habitation and a name. """

Representing programs:

'curry = lambda f: lambda x: lambda y: f(x, y)'

16

Page 73: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Strings are an Abstraction

Representing data:

'200' '1.2e-5' 'False' '[1, 2]'

Representing language:

"""And, as imagination bodies forth The forms of things to unknown, and the poet's pen Turns them to shapes, and gives to airy nothing A local habitation and a name. """

Representing programs:

'curry = lambda f: lambda x: lambda y: f(x, y)'

(Demo)

16

Page 74: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

String Literals Have Three Forms

>>> 'I am string!' 'I am string!'

>>> "I've got an apostrophe" "I've got an apostrophe"

>>> ' ' ' '

17

Page 75: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

String Literals Have Three Forms

>>> 'I am string!' 'I am string!'

>>> "I've got an apostrophe" "I've got an apostrophe"

>>> ' ' ' '

Single-quoted and double-quoted strings are equivalent

17

Page 76: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

String Literals Have Three Forms

>>> 'I am string!' 'I am string!'

>>> "I've got an apostrophe" "I've got an apostrophe"

>>> ' ' ' '

>>> """The Zen of Python claims, Readability counts. Read more: import this.""" 'The Zen of Python\nclaims, Readability counts.\nRead more: import this.'

Single-quoted and double-quoted strings are equivalent

17

Page 77: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

String Literals Have Three Forms

>>> 'I am string!' 'I am string!'

>>> "I've got an apostrophe" "I've got an apostrophe"

>>> ' ' ' '

>>> """The Zen of Python claims, Readability counts. Read more: import this.""" 'The Zen of Python\nclaims, Readability counts.\nRead more: import this.'

A backslash "escapes" the following character

Single-quoted and double-quoted strings are equivalent

17

Page 78: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

String Literals Have Three Forms

>>> 'I am string!' 'I am string!'

>>> "I've got an apostrophe" "I've got an apostrophe"

>>> ' ' ' '

>>> """The Zen of Python claims, Readability counts. Read more: import this.""" 'The Zen of Python\nclaims, Readability counts.\nRead more: import this.'

"Line feed" character represents a new line

A backslash "escapes" the following character

Single-quoted and double-quoted strings are equivalent

17

Page 79: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Dictionaries

{'Dem': 0}

Page 80: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Limitations on Dictionaries

19

Page 81: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Limitations on Dictionaries

Dictionaries are unordered collections of key-value pairs

19

Page 82: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Limitations on Dictionaries

Dictionaries are unordered collections of key-value pairs

Dictionary keys do have two restrictions:

19

Page 83: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Limitations on Dictionaries

Dictionaries are unordered collections of key-value pairs

Dictionary keys do have two restrictions:

•A key of a dictionary cannot be a list or a dictionary (or any mutable type)

19

Page 84: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Limitations on Dictionaries

Dictionaries are unordered collections of key-value pairs

Dictionary keys do have two restrictions:

•A key of a dictionary cannot be a list or a dictionary (or any mutable type)

•Two keys cannot be equal; There can be at most one value for a given key

19

Page 85: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Limitations on Dictionaries

Dictionaries are unordered collections of key-value pairs

Dictionary keys do have two restrictions:

•A key of a dictionary cannot be a list or a dictionary (or any mutable type)

•Two keys cannot be equal; There can be at most one value for a given key

This first restriction is tied to Python's underlying implementation of dictionaries

19

Page 86: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Limitations on Dictionaries

Dictionaries are unordered collections of key-value pairs

Dictionary keys do have two restrictions:

•A key of a dictionary cannot be a list or a dictionary (or any mutable type)

•Two keys cannot be equal; There can be at most one value for a given key

This first restriction is tied to Python's underlying implementation of dictionaries

The second restriction is part of the dictionary abstraction

19

Page 87: CS 61A Lecture 10cs61a/fa16/assets/slides/... · 2017-01-10 · Working with Lists >>> digits = [1, 8, 2, 8] 4 The number of elements >>> len(digits) 4 >>> digits = [2//2, 2+2+2+2,

Limitations on Dictionaries

Dictionaries are unordered collections of key-value pairs

Dictionary keys do have two restrictions:

•A key of a dictionary cannot be a list or a dictionary (or any mutable type)

•Two keys cannot be equal; There can be at most one value for a given key

This first restriction is tied to Python's underlying implementation of dictionaries

The second restriction is part of the dictionary abstraction

If you want to associate multiple values with a key, store them all in a sequence value

19