41
Data Structures More List Methods Our first encoding Matrix

Data Structures More List Methods Our first encoding Matrix

Embed Size (px)

Citation preview

Page 1: Data Structures More List Methods Our first encoding Matrix

Data StructuresMore List Methods

Our first encodingMatrix

Page 2: Data Structures More List Methods Our first encoding Matrix

CQ:Are these programs equivalent?

b = [‘h’,’e’,’l’,’l’,’o’]b.insert(len(b), “w”)print(b)

b = [‘h’,’e’,’l’,’l’,’o’]b.append(“w”)print(b)

21

A: yes

B: no

Page 3: Data Structures More List Methods Our first encoding Matrix

Advanced List OperationsL = [0, 1, 2, 0]

L.reverse()print(L) will print: [0, 2, 1, 0]

L.remove(0)print(L) will print: [2, 1, 0]

L.remove(0)print(L) will print: [2, 1]

print (L.index(2)) will print 0

Page 4: Data Structures More List Methods Our first encoding Matrix

Why are Lists useful?They provide a mechanism for creating a

collection of items

def doubleList(b): i = 0 while i < len(b): b[i] = 2 * b[i] i = i +1 return (b)

print(doubleList([1,2,3]))

Page 5: Data Structures More List Methods Our first encoding Matrix

Using Lists to Create Our Own Encodings

Python provides a number of encodings for us:Binary, ASCII, Unicode, RGB, Pictures etc.

We know the basic building blocks, but we are still missing something …We need to be able to create our own encodings

What if I want to write a program that operates on proteins?

Page 6: Data Structures More List Methods Our first encoding Matrix

Under the hood: what is a matrix?

A matrix is not “pre defined” in python

We “construct” a way to encode a matrix through the use of listsWe will see how to do so using a single list (not

ideal)We will see how to do so using a list of lists

Two different ways Row by Row Column by Column 1 2

3 4( )

Page 7: Data Structures More List Methods Our first encoding Matrix

ListsSuppose we wanted to extract the value 3

The first set of [] get the array in position 1 of y. The second [] is selecting the element in position 2 of that array. This is equiv. to:

y = [“ABCD”, [1,2,3] , ”CD”, ”D”]y[1][2]

z = y[1]z[2]

Page 8: Data Structures More List Methods Our first encoding Matrix

Lets make it more concrete!

Lets revisit encoding a matrix

Lets try something simple:A = [1, -1, 0, 2]B = [1, 0, 0, 0.5, 3, 4, -1, -3, 6]

Page 9: Data Structures More List Methods Our first encoding Matrix

Does this work?We lose a bit of information in this encoding

Which numbers correspond to which row

We can explicitly keep track of rows through a row length variable

B = [1, 0, 0, 0.5, 3, 4, -1, -3, 6]rowLength = 3B[rowLength*y +x]

Page 10: Data Structures More List Methods Our first encoding Matrix

Lets convince ourselves

x = 0y = 0B[3*0 + 0]

B = [1, 0, 0, 0.5, 3, 4, -1, -3, 6]rowLength = 3B[rowLength*y +x]

x = 1y = 1B[3*1 + 1]

x = 2y = 1B[3*1 + 2]

Page 11: Data Structures More List Methods Our first encoding Matrix

Can we encode it another way?

We can encode column by column, but we lose some information againWhich numbers correspond to which column

We can explicitly keep track of columns through a column length variable

B = [1, 0.5, -1, 0, 3, -3, 0, 4, 6]columnLength = 3B[columnLength*x + y]

Page 12: Data Structures More List Methods Our first encoding Matrix

Lets convince ourselves

x = 0y = 0B[3*0 + 0]

x = 1y = 1B[3*1 + 1]

x = 2y = 1B[3*2 + 1]

B = [1, 0.5, -1, 0, 3, -3, 0, 4, 6]columnLength = 3B[columnLength*x + y]

Page 13: Data Structures More List Methods Our first encoding Matrix

Lists of ListsRecall that when we had a string in our list

B = [“ABCD”, 0, 1, 3]

We could utilize the bracket syntax multiple timesprint B[0][1] would print B

Lists can store other ListsB = [[0, 1, 3], 4, 5, 6]

Page 14: Data Structures More List Methods Our first encoding Matrix

Another way to encode a Matrix

Lets take a look at our example matrix

What about this?B= [[1, 0, 0], [0.5, 3, 4], [-1, -3, 6]]

Page 15: Data Structures More List Methods Our first encoding Matrix

Why is this important?We can now write code that more closely

resembles mathematical notation i.e., we can use x and y to index into our matrix

B = [[1, 0, 0], [0.5, 3, 4], [-1, -3, 6]]for x in range(3): for y in range(3): print (B[x][y])

Page 16: Data Structures More List Methods Our first encoding Matrix

…but first some more notation

We can use the “*” to create a multi element sequence6 * [0] results in a sequence of 6 0’s[0, 0, 0, 0, 0, 0]3 * [0, 0] results in a sequence of 6 0’s[0, 0, 0, 0, 0, 0]10 * [0, 1, 2] results in what?

Page 17: Data Structures More List Methods Our first encoding Matrix

What is going on under the hood?

Lets leverage some algebraic properties3 * [0, 0] is another way to write[0, 0] + [0, 0] + [0, 0]

We know that “+” concatenates two sequences together

Page 18: Data Structures More List Methods Our first encoding Matrix

What about lists of lists?We have another syntax for creating lists

[ X for i in range(y)]This creates a list with y elements of X

Example: [ 0 for i in range(6)] ≡ [0]*6[0, 0 ,0 ,0 ,0 ,0]

Example: [[0, 0] for i in range(3)] ≡ [[0,0]]*3[[0, 0], [0, 0], [0, 0]]

What does this does: [2*[0] for i in range(3)]?

Page 19: Data Structures More List Methods Our first encoding Matrix

Lets put it all together

m1 = [ [1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0] ]m2 = [ [2, 4, 6, 0], [1, 3, 5, 0], [0, -1, -2, 0] ]m3= [ 4*[0] for i in range(3) ]

for x in range(3): for y in range(4): m3[x][y]= m1[x][y]+m2[x][y]

Page 20: Data Structures More List Methods Our first encoding Matrix

Data structuresWe have constructed our first data structure!

As the name implies, we have given structure to the dataThe data corresponds to the elements in the matrixThe structure is a list of lists

The structure allows us to utilize math-like notation

Page 21: Data Structures More List Methods Our first encoding Matrix

Clicker Question: did we encode the same matrix

in both programs?

[[1, 2], [3, 4]] [[1, 3], [2, 4]]

21

A: yes

B: no

C: maybe

Page 22: Data Structures More List Methods Our first encoding Matrix

Lets explore why it depends

1 23 4

1 32 4

[[1, 3], [2, 4]]

2[[1, 2], [3, 4]]

1

( () )

Both lists of lists can either be a row by row or acolumn by column encoding

Page 23: Data Structures More List Methods Our first encoding Matrix

Let us encode something else using lists!

Page 24: Data Structures More List Methods Our first encoding Matrix

We call this structure a tree

Root

Root

Page 25: Data Structures More List Methods Our first encoding Matrix

How might we encode such a structure?

What structures do we know of in python?Strings, Ranges, Lists

We know that lists allow us to encode complex structures via sub listsWe used sub list to encode either a row or a

column in the matrixWe used an ‘outer’ list of rows or columns as a

matrix

Page 26: Data Structures More List Methods Our first encoding Matrix

Can we use the same strategy?

How might we encode a simple tree?

Root

Leaf1 Leaf2 Leaf3

Tree = [‘Leaf1’, ‘Leaf2’, ‘Leaf3’]

Page 27: Data Structures More List Methods Our first encoding Matrix

Trees can be more complex

Root

Leaf1 Leaf2

Leaf3 Leaf4 Leaf5

Tree = [‘Leaf1’, ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, ‘Leaf5’]]

Page 28: Data Structures More List Methods Our first encoding Matrix

Trees can be more complex

Root

Leaf1

Leaf2

Leaf3 Leaf4 Leaf5

Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, ‘Leaf5’]]

Leaf0

Page 29: Data Structures More List Methods Our first encoding Matrix

Trees can be more complex

Root

Leaf1

Leaf2

Leaf3 Leaf4

Leaf6

Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]]

Leaf0

Leaf5

Page 30: Data Structures More List Methods Our first encoding Matrix

What is the intuitionEach sub list encodes the ‘branches’ of the tree

We can think of each sub list as a ‘sub tree’

We can use indexes (the bracket notation []) to select out elements or ‘sub trees’

Page 31: Data Structures More List Methods Our first encoding Matrix

How can we select out the leaves?

Root

Leaf1

Tree[0]

Leaf2

Tree[1]

Leaf3

Tree[2]

Tree = [‘Leaf1’, ‘Leaf2’, ‘Leaf3’]

Page 32: Data Structures More List Methods Our first encoding Matrix

Indexes provide us a way to “traverse” the tree

Root

Leaf1

Leaf2

Leaf3 Leaf4

Leaf6

Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]]

Leaf0

Leaf5

0

0

0

0 1

1

1

1

2

2

Page 33: Data Structures More List Methods Our first encoding Matrix

Indexes provide us a way to “traverse” the tree

Root

Leaf1

Leaf2

Leaf3 Leaf4

Leaf6

Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]]Tree[2]

Leaf0

Leaf5

0

0

0

0 1

1

1

1

2

2

Page 34: Data Structures More List Methods Our first encoding Matrix

Indexes provide us a way to “traverse” the tree

Root

Leaf1

Leaf2

Leaf3 Leaf4

Leaf6

Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]]Tree[2][2]

Leaf0

Leaf5

0

0

0

0 1

1

1

1

2

2

Page 35: Data Structures More List Methods Our first encoding Matrix

Indexes provide us a way to “traverse” the tree

Root

Leaf1

Leaf2

Leaf3 Leaf4

Leaf6

Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]]Tree[2][2][1]

Leaf0

Leaf5

0

0

0

0 1

1

1

1

2

2

Page 36: Data Structures More List Methods Our first encoding Matrix

CQ: How do we select ‘Leaf4’ from the Tree?

Tree = [[‘Leaf0’,‘Leaf1’], ‘Leaf2’, [‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]]

A: Tree[2][1]

B: Tree[3][2]

C: Tree[1][2]

Page 37: Data Structures More List Methods Our first encoding Matrix

Operations on TreesTrees, since they are encoded via lists support

the same operations lists supportWe can “+” two treesWe can embedded two trees within a list

This creates a larger tree with each of the smaller trees as sub trees

Example: Tree1 = [‘Leaf1’, ‘Leaf2’] Tree2 = [‘Leaf3’, ‘Leaf4’] Tree = [Tree1, Tree2]

Page 38: Data Structures More List Methods Our first encoding Matrix

“+” two trees

Leaf1

Leaf2

Leaf3 Leaf4Leaf0

Leaf6Leaf5Tree1 = [[‘Leaf0’, ‘Leaf1’]]Tree2 = [‘Leaf2’]Tree3 = [[‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]]

Page 39: Data Structures More List Methods Our first encoding Matrix

“+” two trees

Leaf1

Leaf2

Leaf3 Leaf4Leaf0

Leaf6Leaf5Tree1 = [[‘Leaf0’, ‘Leaf1’]]Tree2 = [‘Leaf2’]Tree4 = Tree1+Tree2 [[‘Leaf0’, ‘Leaf1’], ‘Leaf2’]

Page 40: Data Structures More List Methods Our first encoding Matrix

“+” two trees

Leaf1

Leaf2

Leaf3 Leaf4Leaf0

Leaf6Leaf5Tree4 = [[‘Leaf0’, ‘Leaf1’], ‘Leaf2’]Tree3 = [[‘Leaf3’, ‘Leaf4’, [‘Leaf5’, ‘Leaf6’]]]Tree = Tree4+Tree3

Page 41: Data Structures More List Methods Our first encoding Matrix

Why are trees important?They are a fundamental structure in computer

science

They enable us to search very quicklyWe will revisit trees later in the course

What have we covered so far:Given a tree diagram we can write a list of lists Given a complex list we can select elements