{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Chapter 8: Map, Filter, & Reduce (Review Questions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The questions below assume that you have read the [first ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/main/08_mfr/00_content.ipynb), [second ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/main/08_mfr/01_content.ipynb), and [third ](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/main/08_mfr/04_content.ipynb) part in Chapter 8.\n", "\n", "Be concise in your answers! Most questions can be answered in *one* sentence." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Essay Questions " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q1**: With the [map() ](https://docs.python.org/3/library/functions.html#map) and [filter() ](https://docs.python.org/3/library/functions.html#filter) built-ins and the [reduce() ](https://docs.python.org/3/library/functools.html#functools.reduce) function from the [functools ](https://docs.python.org/3/library/functools.html) module in the [standard library ](https://docs.python.org/3/library/index.html), we can replace many tedious `for`-loops and `if` statements. What are some advantages of doing so?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " < your answer >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q2**: Looking at the `lambda` expression inside [reduce() ](https://docs.python.org/3/library/functools.html#functools.reduce) below, what [built-in function ](https://docs.python.org/3/library/functions.html) is mimicked here?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```python\n", "from functools import reduce\n", "\n", "numbers = [7, 11, 8, 5, 3, 12, 2, 6, 9, 10, 1, 4]\n", "\n", "reduce(lambda x, y: x if x > y else y, numbers)\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " < your answer >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q3**: What is the primary use case of **`list` comprehensions**? Why do we describe them as **eager**?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " < your answer >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q4**: **`generator` expressions** may replace `list` objects and list comprehensions in many scenarios. When evaluated, they create a **lazy** `generator` object that does *not* **materialize** its elements right away. What do we mean by that? What does it mean for a `generator` object to be **exhausted**?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " < your answer >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q5**: What does it mean for the **boolean reducers**, the built-in [all() ](https://docs.python.org/3/library/functions.html#all) and [any() ](https://docs.python.org/3/library/functions.html#any) functions, to follow the **short-circuiting** strategy?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " < your answer >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q6**: What is an **iterator**? How does it relate to an **iterable**?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " < your answer >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## True / False Questions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Motivate your answer with *one short* sentence!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q7**: `lambda` expressions are useful in the context of the **map-filter-reduce** paradigm, where we often do *not* re-use a `function` object more than once." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " < your answer >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q8**: Using **`generator` expressions** in place of **`list` comprehensions** wherever possible is a good practice as it makes our programs use memory more efficiently." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " < your answer >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q9**: Just as **`list` comprehensions** create `list` objects, **`tuple` comprehensions** create `tuple` objects." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " < your answer >" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.2" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": false, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }