Functions can take lists as parameters, or can return lists

Recall the syntax for defining a function:

def function_name(optional parameters)->return type: # Indented code block # Optional return statement

Recall that we have seen parameter types and return types such as None, float, str, or int. What is new in this section is to define functions that takes parameters that are lists, or whose return type is a list.

Here's a template for the definition of a function that takes a list of ints as a parameter:

def foo(some_list: list[int])->None: # code block

Here is a template for the definition of a function that returns a list of strs:

def bar()->list[str] # code block return a_list_of_strings

Putting it all together

The program below demonstrates taking a list as a parameter to a function, and returning a list from a function. The first function checks to see if a list has only positive values. The second function extracts all of the nonpositive values from a list, returning a new list with just the nonpositive values.

The main program creates a list of random numbers. Then it checks to see if they are all positive. If so, it outputs them. Otherwise, it outputs the list of numbers that weren't positive.

from random import random def is_all_positive(some_list: list[float])->bool: """ Determines if every element in the given list is positive parameters: some_list : a list of float values (type: list[float]) return: True if all values are positive and False otherwise (type: bool) """ for element in some_list: # As soon as you find a nonpositive number, return False if element <= 0: return False # If we make it this far, then they are all positive return True def get_all_nonpositives(some_list: list[float])->list[float]: """ Build a new list containing all nonpositive values from some_list parameters: some_list : a list of float values (type: list[float]) return: A new list containing nonpositive float values (type: list[float]) """ nonpositives = [] # iterate over all elements, append each negative one to the new list for element in some_list: if element < 0: nonpositives.append(element) return nonpositives def main(): # start with an empty list a_list = [] # Make a list of 5 random floats between -100 and 100 for i in range(5): # random() gives a float in [0, 1) # random()*200 gives a float in [0, 200) # random() * 200 - 100 gives a float in [-100, 100) a_list.append(random() * 200 - 100) # If they all came out positive, show the list if is_all_positive(a_list): print(f"The list is all positive: {a_list}") # If they weren't all positives, output the ones that aren't: else: nonpositives = get_all_nonpositives(a_list) print(f"Here are the {len(nonpositives)} nonpositive elements: {nonpositives}") # Run the program: if __name__ == '__main__': main()