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

​