1 of 52

CSE 160 Section 3

Functions, Lists, & Nested Lists

TA & TA

CSE 160

CSE 160: Section 3

2 of 52

Logistics

  • Homework: DNA Analysis (due Friday 4/17 @ 11:59pm)
    • Submitting file on Gradescope - don’t change the file name!
    • Wait for autograder!
  • Section Assignment 3 (due Friday 4/17 @ 11:59pm)

  • Quest 1 in lecture tomorrow! (on Friday 4/17 @ 1:30pm)
    • See Practice Quest 1 posted on Ed
  • Programming Practice 3 (due Tuesday 4/21 @ 11:59pm)

CSE 160: Section 3

3 of 52

Lecture Review: Functions

CSE 160: Section 3

4 of 52

Functions: an overview

  • A function is a block of code which only runs when it is called.
  • You can pass data, known as parameters, into a function.
  • A function can return data as a result (but it doesn’t have to)

CSE 160: Section 3

5 of 52

Why do we use functions?

  • Don’t Repeat Yourself (DRY)
    • If you’re doing the same thing over and over again, it might be easier to make it into a function
  • Abstractions
    • It’s easier to call a function (like sqrt() or sum()) than writing all the code
    • It’s easier to reason about your program when you break it down into smaller chunks

CSE 160: Section 3

6 of 52

Function Syntax

# Writing a function

def func_name(parameter1,...):

function body

return value

# To call that function:

func_name(parameter1,...)

def

word needed to define a function

func_name

a name you give the function

parameter1,

a list of parameters you pass in a function. (Optional)

function body

the code inside the function

return

tells the function to return value back to the caller. (Optional)

CSE 160: Section 3

7 of 52

Functions run only when called

  • What would be the output of this program?

def winter():

x = “Happy Winter!”

print(x)

Output:

def fall():

x = “Happy Fall!”

print(x)

fall()

Output:

Happy Fall!

CSE 160: Section 3

8 of 52

Functions run only when called

  • What would be the output of this program?

def winter():

x = “Happy Winter!”

print(x)

Output:

def fall():

x = “Happy Fall!”

print(x)

fall()

Output:

Happy Fall!

Include parentheses in function call

CSE 160: Section 3

9 of 52

Parameters

  • We can pass a function a value to work with, called a “parameter”

def print_twice(x):

print(x)

print(x)

print_twice(“Hi!”)

Output:

Hi!

Hi!

CSE 160: Section 3

10 of 52

Return Value

This function does have a return value, what will this print?

def two_times_seven():

x = 2 * 7

return x

print(two_times_seven())

Output:

14

CSE 160: Section 3

11 of 52

Return Value

This function does have a return value, what will this print?

def two_times_seven():

x = 2 * 7

return x

print(two_times_seven())

Output:

14

You must have a return statement if you want your function call to have access to x in two_times_seven()! Otherwise, it will return None

CSE 160: Section 3

12 of 52

Return vs Print in Functions

Function with a return

Function with a print statement

Output: ?

Can you see the difference?

def add(a, b):

return a + b

def add_print(a, b):

print(a + b)

CSE 160: Section 3

13 of 52

Function with a Return

Function with a return

def add(a, b):

return a + b

  • When you call add(a, b):
    • Nothing will show up unless you print the result
    • It only returns a value, it doesn't display it.

  • You need to print to see the output:
    • print(add(1,2))

print(add(1,2))

Output:

3

CSE 160: Section 3

14 of 52

Function with a Print

Function with a print statement

print(add_print(1,2))

Output:

3

None

def add_print(a, b):

print(a + b)

  • On the other hand, add_print(a, b) will immediately print the result when called:
    • add_print(1,2)

  • But it doesn't return anything, so if you try:
    • print(add_print(1,2))
    • Gives you None because it does not return anything

CSE 160: Section 3

15 of 52

Docstrings

  • You should comment your functions so others (and yourself) can understand what they do without having to read through the code. You should include:
    • What are the inputs? What types should they be?
    • What does it do (does it print something?)
    • What does it return?

def abs(x):

‘’’Takes in a number (x), and returns its absolute value’’’

if x < 0:

return x * -1

else:

return x

CSE 160: Section 3

16 of 52

Mod Operator Overview

CSE 160: Section 3

17 of 52

Mod

Modulo operator, denoted as %, is a mathematical operation that calculates the remainder when one number is divided by another.

  • 2 % 5

  • 3 % 7

  • 5 % 2

  • 8 % 3

  • 20 % 5

CSE 160: Section 3

18 of 52

Mod

  • 2 % 5 = 2

  • 3 % 7 = 3

  • 5 % 2 = 1

  • 8 % 3 = 2

  • 20 % 5 = 0

CSE 160: Section 3

19 of 52

Mod

What is the output of the following code?

for i in range(5):

print(i % 3)

CSE 160: Section 3

20 of 52

Mod

What is the output of the following code?

for i in range(5):

print(i % 3)

Answer:

0

1

2

0

1

CSE 160: Section 3

21 of 52

Lecture Review:

Lists & Nested Lists

CSE 160: Section 3

22 of 52

Basic List Operations

  • Make a list
    • listname = [item0, item1, …., item]
  • Access an element
    • listname[i] returns the item at index i
    • IndexError if doesn't exist
  • List Slicing
    • listname[a : b] creates a list that contains the elements in between indexes a (inclusive) and b (exclusive).
    • can also use 3 parameters, 3rd parameter is step size
  • Length
    • len(listname) will return the number of elements in the list.
  • Changing lists
    • listname[index] = new_item
  • Adding lists together
    • list1 + list2 will return a new list that has both of the lists together

CSE 160: Section 3

23 of 52

Functions that Modify Lists

  • Append
    • listname.append(item) adds item to the end of the list
  • Insert
    • listname.insert(i, item) puts the item at index i, and moves everything else to the right
  • Extend
    • list1.extend(list2) will add list2 to the end of list1
  • Reverse
    • listname.reverse() reverses the order of the list (in-place)
  • Sort
    • listname.sort() sorts the list in ascending order (smallest to greatest) (in-place)
  • Index
    • listname.index() returns the first index i, that the item was found at

CSE 160: Section 3

24 of 52

Making a List

listname = [item1, item2, ..., item2]

Example:

lst = [22, 45, 65, 89, 5]

index:

0

1

2

3

4

value:

22

45

65

89

5

CSE 160: Section 3

25 of 52

Access Items

listname[i] returns the item at index i

Example:

lst = [22, 45, 65, 89, 5]

print(lst[1])

index:

0

1

2

3

4

value:

22

45

65

89

5

Output:

45

CSE 160: Section 3

26 of 52

List Slicing

(2 parameters)

listname[a : b] returns a new copy of the list in between indexes a and b.

  • It includes item at index a, but excludes item at the index b.
  • When a or b are left empty: ‘a’ defaults to 0, ‘b’ defaults to the last index + 1

Example:

Output:

lst = [22, 45, 65, 89, 5]

print(lst[1:3])

[45, 65]

index:

0

1

2

3

4

value:

22

45

65

89

5

CSE 160: Section 3

27 of 52

List Slicing

(3 parameters)

listname[a : b : c] returns a new copy of the list in between indexes a and b with a step size c.

  • It includes item at index a, but excludes item at the index b.
  • When c is left empty: defaults to 1

Example:

Output:

lst = [22, 45, 65, 89, 5]

print(lst[0:3:2])

[22, 65]

index:

0

1

2

3

4

value:

22

45

65

89

5

CSE 160: Section 3

28 of 52

List Slicing (Empty parameters)

lst = [22, 45, 65, 89, 5]

print(lst[:2:3])

print(lst[0::2])

print(lst[::])

Output:

[22]

[22, 65, 5]

[22, 45, 65, 89, 5]

CSE 160: Section 3

29 of 52

Changing Lists

What if we wanted to change a list?

Example:

lst = [22, 45, 65, 89, 5]

lst[1] = 10

index:

0

1

2

3

4

value:

22

10

65

89

5

CSE 160: Section 3

30 of 52

list + list

list1 + list2 will return a new list that has both of the lists together

Example:

Output:

lst1 = [1, 2, 3]

lst2 = [4, 5, 6]

lst3 = lst1 + lst2

print(lst3)

[1, 2, 3, 4, 5, 6]

CSE 160: Section 3

31 of 52

.index()

listname.index(item) returns the first index i, that the item was found at

Example:

lst = [22, 45, 65, 89, 5]

print(lst.index(45))

index:

0

1

2

3

4

value:

22

45

65

89

5

Output:

1

CSE 160: Section 3

32 of 52

.insert()

listname.insert(i, item) puts the item at index i, and moves everything else to the right, in-place.

Example:

Output:

lst = [22, 45, 65, 89, 5]

lst.insert(4, 999)

print(lst)

[22, 45, 65, 89, 999, 5]

index:

0

1

2

3

4

5

value:

22

45

65

89

999

5

CSE 160: Section 3

33 of 52

.extend()

list1.extend(list2) will add list2 to the end of list1

Example:

Output:

lst1 = [1, 2, 3]

lst2 = [4, 5, 6]

lst1.extend(lst2)

print(lst1)

[1, 2, 3, 4, 5, 6]

CSE 160: Section 3

34 of 52

.reverse()

listname.reverse() reverses a list

Example:

Output:

lst = [1, 2, 3]

lst.reverse()

print(lst)

[3, 2, 1]

CSE 160: Section 3

35 of 52

.sort()

listname.sort() sorts a list

Example:

Output:

lst = [2, 1, 3]

lst.sort()

print(lst)

[1, 2, 3]

CSE 160: Section 3

36 of 52

Note About In Place Functions

insert(), extend(), reverse(), and sort() are all called in place functions.

Example:

Output:

In-place” means that the list is modified, but the result it returns is None

lst = [1, 2, 3]

result = lst.reverse()

print(result)

print(lst)

None

[3, 2, 1]

CSE 160: Section 3

37 of 52

Nested Lists

  • Nested List is a list that contains other lists as elements.

  • Think of it like a list of rows in a table:

nested[0] → [1, 2]

nested[1] → [3, 4]

  • You can access individual elements by chaining indices:

nested = [[1, 2], [3, 4], [5, 6]]

print(nested[1][0])

Output: 3

CSE 160: Section 3

38 of 52

Changing Elements in a Nested List

  • What would we need to print if we wanted to Catherine’s height?

  • What if we wanted to change Bob’s height to 90?

heights = [["Alice", 95], ["Bob", 88], ["Catherine", 76]]

print(heights[2][1])

heights[1][1] = 90

CSE 160: Section 3

39 of 52

Looping Through a Nested List

  • To loop through a nested list you’ll need a nested for loop

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for row in matrix:

for item in row:

print(item)

Output: 1

2

CSE 160: Section 3

40 of 52

Section Handout Problems

CSE 160: Section 3

41 of 52

Problem 1

Write a function avg_age(ages) that calculates and returns the average of a list of ages. You are not allowed to use Python’s built in sum() function. Your function should take the list ages as a parameter and return the average. For example, given ages = [20, 21, 22], avg_age(ages) should return 21.

Python Tutor

CSE 160: Section 3

42 of 52

Problem 2

Write a function called count_character(word, search), where given a string called word, return the number of times the character called search appears.

For example, count_character(“apple pie”, “p”) return 3.

Python Tutor

CSE 160: Section 3

43 of 52

Problem 3

What values would be printed when you run the following lines of code?

list_1 = [1, 2, 3, 4, 5]

list_2 = list_1

list_3 = list_1[:] # equivalent to list_1[0:5]

list_2[0] = 98

list_1[4] = 99

print("List 1:", list_1)

print("List 2:", list_2)

print("List 3:", list_3)

Python Tutor

CSE 160: Section 3

44 of 52

Problem 4

Write a function called count(lst, value) that takes in a list and a value. It should return the number of times the value is in the list. For example: if my_lst = [1, 3, 5, 3, 2, 5, 6, 3, 3] when you call count(my_lst, 3) it should return 4.

Python Tutor

CSE 160: Section 3

45 of 52

Additional Problems

CSE 160: Section 3

46 of 52

Problem 5

Given a list of students’ names (student_lst), write a function max_height(student_lst) that returns the maximum height in inches. Assume a function get_height(student) is given to you, and will return the height (in inches) of any student when given a student name.

For example: get_height(“Nicholas”) will return 75.

a) Implement the function max_height(student_lst)

Python Tutor

b) What is the return type of max_height(student_lst)?

c) Suppose you printed the max height instead of returning it. What would be the return

type of max_height(student_lst)

PythonTutor

CSE 160: Section 3

47 of 52

Problem 6 Dot Product

Create a function "dot_product" which takes in two lists of integers and returns the dot product of the two lists. You can assume the lists are of equal length, and contain only integer values.

So if these were your two lists:

The dot product would be:

index:

0

1

value:

1

2

index:

0

1

value:

3

4

CSE 160: Section 3

48 of 52

Problem 6 Dot Product

Create a function "dot_product" which takes in two lists of integers and returns the dot product of the two lists. You can assume the lists are of equal length, and contain only integer values.

So if these were your two lists:

The dot product would be:

1*3

index:

0

1

value:

1

2

index:

0

1

value:

3

4

CSE 160: Section 3

49 of 52

Problem 6 Dot Product

Create a function "dot_product" which takes in two lists of integers and returns the dot product of the two lists. You can assume the lists are of equal length, and contain only integer values.

So if these were your two lists:

The dot product would be:

1*3 + 4*2

index:

0

1

value:

1

2

index:

0

1

value:

3

4

CSE 160: Section 3

50 of 52

Problem 6 Dot Product

Create a function "dot_product" which takes in two lists of integers and returns the dot product of the two lists. You can assume the lists are of equal length, and contain only integer values.

So if these were your two lists:

The dot product would be:

1*3 + 4*2 = 11 Python Tutor

index:

0

1

value:

1

2

index:

0

1

value:

3

4

CSE 160: Section 3

51 of 52

Section Code: �GoodLuck

CSE 160: Section 3

52 of 52

Looking ahead: �Advanced Data Structures

Be sure to remember the Section Code!

Want more information on Basic List Operations and Functions that Modify Lists? See the skipped slides in the deck when its posted!

CSE 160: Section 3