{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "#reduce()\n", "\n", "Many times students have difficulty understanding reduce() so pay careful attention to this lecture. The function reduce(function, sequence) continually applies the function to the sequence. It then returns a single value. \n", "\n", "If seq = [ s1, s2, s3, ... , sn ], calling reduce(function, sequence) works like this:\n", "\n", "* At first the first two elements of seq will be applied to function, i.e. func(s1,s2) \n", "* The list on which reduce() works looks now like this: [ function(s1, s2), s3, ... , sn ]\n", "* In the next step the function will be applied on the previous result and the third element of the list, i.e. function(function(s1, s2),s3)\n", "* The list looks like this now: [ function(function(s1, s2),s3), ... , sn ]\n", "* It continues like this until just one element is left and return this element as the result of reduce()\n", "\n", "Lets see an example:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "113" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lst =[47,11,42,13]\n", "reduce(lambda x,y: x+y,lst)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets look at a diagram to get a better understanding of what is going on here:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nahxjzIuy4e7du999990BAwZUrlw5Xxnw6pNOqDmys7MXLly4bNmyjz/+GApaia2+z7fffrtkyZJP\nPvlkkSJFTFe5FEt26NChe/fut956qzFjHjROcnJy27ZtFyxYEBcXl99u8urvXBPqT7Gxse3atWvf\nvn2TJk127typq3hDrZk/21i/ZmZmjh071rKs559/Xrf0hfbiN/hre9q23b9//xYtWhjGyRvS0tJ6\n9eo1b968uLi40E6UTyDy1Q0FefrkyZMzZszweDwDBw4MJsDy87C8evXqxYsXJyYmPvDAA6afXIra\nTUtLGzVqVJMmTR566CFjwzyYMS0tbciQId26datVq1Y+NSDnPxARMyPi+vXrExMT//jjj7N+lX/u\nU9/PrFmz+vTpk5qaGryYr+6zQCBotAEDBqxbty70isHftx4zP/nkkzt27Ah2lnxow/yldM4d97xe\n7wsvvHD77bc/88wzbrf7qieYQ/9dbbpXXnklLi4uPOb7r25bI2KbNm06dOjQrFkzMMs4L9Ihmdnj\n8Tz77LMvvvhiw4YN83VBUz7nb/1m9uzZffv23bZtW+j1q0XhwVElKSmpQ4cOK1asyM+jSv5vX/2a\nnp7+/PPP6yY2GicPZvR4PAMGDNi8eXP+98P8qHTOpXAhxK5duz7++OOKFSt27979arF46LA8Y8aM\n3377rV+/fpUqVTJlspdoUiLq1q3b888/H8wcG8tcbBq0R48ejz76aIFIhOXfcxeChtP9vHr16qNG\njXK73Y8//niQjEInj64Y4wBA165dc3JyJkyYUKlSpbPu1uDvd5WgSRs3bty/f/9bb73VWDIPBhRC\nJCYmtmzZUjNO/r95kf/v8izJs3HjxvHjx3fr1q1x48YOh+MK8HqowNmzZ8+nn35aq1atli1bmjH5\n0q2ampr6+uuv9+zZs2bNmsaeeUiMCCGGDRvWqFGjxMTEgmJAwQXk4IXQxQTp6emLFy9es2bNtGnT\n/tHc7Vl8N2vWrN9///2pp56qXbu2SRtfOrKzs/v169e9e/d69eoZS+ZtFOzbt+/tt9/+5JNPFiCH\nLDCkc24Qe/Dgwfvvv3/ZsmV6AXcoO/wTZPf+++8fPHhw9OjRpntcluYDgObNm48bN65KlSpnUbzB\n32ScF198sXr16l26dClYQ2DBI52zTN+rV69atWq1atWqRIkSQYe+ROufRWEHDx6cPXt2XFxcnz59\n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\nXiCLJ+r2WwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image('http://www.python-course.eu/images/reduce_diagram.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note how we keep reducing the sequence until a single final value is obtained. Lets see another example:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#Find the maximum of a sequence (This already exists as max())\n", "max_find = lambda a,b: a if (a > b) else b" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "47" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Find max\n", "reduce(max_find,lst)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hopefully you can see how useful reduce can be in various situations. Keep it in mind as you think about your code projects!" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }