{ "cells": [ { "cell_type": "markdown", "id": "0489ff14-6a60-491a-9b41-811ed19b6de2", "metadata": {}, "source": [ "This is the transcript of the lecture material from Friday, November 15, 2024.
\n", "
\n", "Let's start by building two collections that look like arrays in Fortran. Notice the difference in notation between a and b, however.
\n", "Collection a uses ()'s, while b uses []'s." ] }, { "cell_type": "code", "execution_count": 1, "id": "d174582b-3683-4c25-b9dd-c65702cc882e", "metadata": {}, "outputs": [], "source": [ "a = (2,3,4)\n", "b = [2,3,4]" ] }, { "cell_type": "markdown", "id": "0b0120f1-da4b-427a-b5d6-fefc0076e8fa", "metadata": {}, "source": [ "Let's see what each one of these really is." ] }, { "cell_type": "code", "execution_count": 2, "id": "44079e9d-a266-45dd-a6e3-14d3df154a44", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tuple" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(a)" ] }, { "cell_type": "code", "execution_count": 3, "id": "ed0e6b6d-e050-4f70-a271-73186483f281", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "list" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(b)" ] }, { "cell_type": "markdown", "id": "fdad07fd-bb46-4cac-9b36-649e63d43a3b", "metadata": {}, "source": [ "Collection a is a tuple, while collection b is a list. What is the difference? Let's start by changing an element of list b." ] }, { "cell_type": "code", "execution_count": 4, "id": "1df59ba2-c810-4c94-b6ce-e9083a1a585f", "metadata": {}, "outputs": [], "source": [ "b[1] = 5" ] }, { "cell_type": "code", "execution_count": 5, "id": "4de2e0d2-af0f-404e-858e-a874e02b8928", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 5, 4]\n" ] } ], "source": [ "print(b)" ] }, { "cell_type": "markdown", "id": "e65b154c-8e9b-44c5-9beb-0dceca35775c", "metadata": {}, "source": [ "Ok. No problem. This worked. Notice that b[1] is the SECOND element of the list. Remember, python indexing starts with 0, not 1 like Fortran.
\n", "Great. Now let's try and change an element of tuple a." ] }, { "cell_type": "code", "execution_count": 6, "id": "c32fd8b4-b4b3-4061-9c9d-b5cab439f288", "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[6], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43ma\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m5\u001b[39m\n", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ], "source": [ "a[1] = 5" ] }, { "cell_type": "markdown", "id": "793305eb-da61-4c28-ad1e-52516019c46c", "metadata": {}, "source": [ "We get an error. Why? The reason is that lists are mutable (able to be changed), and tuples are immutable (not able to be changed).
\n", "When we tried to change an element of the tuple, python threw an error.
\n", "Let's look at another list." ] }, { "cell_type": "code", "execution_count": 7, "id": "1067de57-2eb6-4322-a9c4-966306b906f7", "metadata": {}, "outputs": [], "source": [ "b = [91, 'Lions', 273.15]" ] }, { "cell_type": "code", "execution_count": 8, "id": "1b965e7a-f51c-40fd-8ae7-52a8f022e050", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "int" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(b[0])" ] }, { "cell_type": "markdown", "id": "fb7d581a-bccc-4363-bcf3-6e460ab29d65", "metadata": {}, "source": [ "In python, lists and tuples can contain elements of different types. Our new list b contains an integer, string, and float.
\n", "What happens with this line?" ] }, { "cell_type": "code", "execution_count": 9, "id": "ae967cdf-a4a8-4571-8ab8-07ecc7486f45", "metadata": {}, "outputs": [ { "ename": "IndexError", "evalue": "tuple index out of range", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[9], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43ma\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m]\u001b[49m)\n", "\u001b[0;31mIndexError\u001b[0m: tuple index out of range" ] } ], "source": [ "print(a[3])" ] }, { "cell_type": "markdown", "id": "0cf4db5b-a70d-464e-a46e-6cccaf055401", "metadata": {}, "source": [ "We get an error because we are trying to reference and element that is outside of the defined range.
\n", "Tuple a contains three things (2,3,4), but you reference them through a[0], a[1], a[2]. The valid indices are 0, 1, and 2. Not 3.

\n", "Let's look at another feature of python. Here is a new list." ] }, { "cell_type": "code", "execution_count": 10, "id": "c8535f5b-1699-484a-87ad-5e3908516d1f", "metadata": {}, "outputs": [], "source": [ "a = ['Lions', 'Tigers', 'Bears']" ] }, { "cell_type": "markdown", "id": "97fef4eb-af53-4130-9a9b-1b5c1d4451ec", "metadata": {}, "source": [ "Now, let's set list b equal to a and verify that the command worked." ] }, { "cell_type": "code", "execution_count": 11, "id": "c386c97c-924a-4ae8-8bfa-003afec65a3c", "metadata": {}, "outputs": [], "source": [ "b = a" ] }, { "cell_type": "code", "execution_count": 12, "id": "011d3d8b-c2bf-42b1-82fb-f5d80527fb4a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Lions', 'Tigers', 'Bears'] ['Lions', 'Tigers', 'Bears']\n" ] } ], "source": [ "print(a,b)" ] }, { "cell_type": "markdown", "id": "f57d0db0-e2f7-48ed-ad05-876f2f4bcd9c", "metadata": {}, "source": [ "Great. Everything looks good. Now, let's change the second element (index 1) of list a and print out our lists again." ] }, { "cell_type": "code", "execution_count": 13, "id": "aab18003-d4d8-4d84-bfe1-2c0b6c61d47c", "metadata": {}, "outputs": [], "source": [ "a[1] = 'Bananas'" ] }, { "cell_type": "code", "execution_count": 14, "id": "e56e4bbb-a246-49c7-9a96-73d34d3b2e09", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Lions', 'Bananas', 'Bears'] ['Lions', 'Bananas', 'Bears']\n" ] } ], "source": [ "print(a,b)" ] }, { "cell_type": "markdown", "id": "bcba3fb0-1ee3-497e-930b-a0b40036e999", "metadata": {}, "source": [ "What happened? Both list a and list b changed. This is because the statement b=a is what is called a \"soft copy.\"
\n", "This is often not desireable. What do we do? We make something called a \"hard copy.\"" ] }, { "cell_type": "code", "execution_count": 15, "id": "ae9c1a94-992d-4d28-a823-8bfc85938f61", "metadata": {}, "outputs": [], "source": [ "c = a[:]" ] }, { "cell_type": "code", "execution_count": 16, "id": "4bc91c1e-eeca-421d-afa1-ab0a3d717be2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Lions', 'Bananas', 'Bears'] ['Lions', 'Bananas', 'Bears'] ['Lions', 'Bananas', 'Bears']\n" ] } ], "source": [ "print(a,b,c)" ] }, { "cell_type": "code", "execution_count": 17, "id": "a5057177-1304-4b98-998f-28ce37b94e71", "metadata": {}, "outputs": [], "source": [ "a[1] = 'Apples'" ] }, { "cell_type": "code", "execution_count": 18, "id": "94751e9b-61ab-4032-a0e9-fa00761e3eff", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Lions', 'Apples', 'Bears'] ['Lions', 'Apples', 'Bears'] ['Lions', 'Bananas', 'Bears']\n" ] } ], "source": [ "print(a,b,c)" ] }, { "cell_type": "markdown", "id": "1669e228-741a-4d79-9855-5e416309b9b3", "metadata": {}, "source": [ "c = a[:] is called a \"hard copy\" and notice when we change list a again, b changed, but c didn't.
\n", "The reason is that list c is a \"hard copy\" of list a and list b is a \"soft copy\" of list a.

\n", "Ok, let's move on to something else." ] }, { "cell_type": "code", "execution_count": 19, "id": "87d64ff5-81e7-4de5-b34a-c1e8b4861d22", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "id": "9ed5efa0-a737-4988-8b88-b555f31c66da", "metadata": {}, "source": [ "These two lines import two packages from the python libraries.
\n", "Notice the use of np and plt as aliases to the numpy and matplotlib packages." ] }, { "cell_type": "code", "execution_count": 20, "id": "691b0a46-aae4-4e72-b02d-0da764da3c12", "metadata": {}, "outputs": [], "source": [ "x = np.linspace(-2,2,200)" ] }, { "cell_type": "markdown", "id": "964685d0-b6ce-4a85-94bf-e2af98e5d1d3", "metadata": {}, "source": [ "The line above creates a list of numbers from -2 to 2 with 200 equally spaced points.
\n", "Let's print the list to understand it bettter." ] }, { "cell_type": "code", "execution_count": 21, "id": "8e3c9482-2832-470e-b1aa-bd1609b294c6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-2. -1.9798995 -1.95979899 -1.93969849 -1.91959799 -1.89949749\n", " -1.87939698 -1.85929648 -1.83919598 -1.81909548 -1.79899497 -1.77889447\n", " -1.75879397 -1.73869347 -1.71859296 -1.69849246 -1.67839196 -1.65829146\n", " -1.63819095 -1.61809045 -1.59798995 -1.57788945 -1.55778894 -1.53768844\n", " -1.51758794 -1.49748744 -1.47738693 -1.45728643 -1.43718593 -1.41708543\n", " -1.39698492 -1.37688442 -1.35678392 -1.33668342 -1.31658291 -1.29648241\n", " -1.27638191 -1.25628141 -1.2361809 -1.2160804 -1.1959799 -1.1758794\n", " -1.15577889 -1.13567839 -1.11557789 -1.09547739 -1.07537688 -1.05527638\n", " -1.03517588 -1.01507538 -0.99497487 -0.97487437 -0.95477387 -0.93467337\n", " -0.91457286 -0.89447236 -0.87437186 -0.85427136 -0.83417085 -0.81407035\n", " -0.79396985 -0.77386935 -0.75376884 -0.73366834 -0.71356784 -0.69346734\n", " -0.67336683 -0.65326633 -0.63316583 -0.61306533 -0.59296482 -0.57286432\n", " -0.55276382 -0.53266332 -0.51256281 -0.49246231 -0.47236181 -0.45226131\n", " -0.4321608 -0.4120603 -0.3919598 -0.3718593 -0.35175879 -0.33165829\n", " -0.31155779 -0.29145729 -0.27135678 -0.25125628 -0.23115578 -0.21105528\n", " -0.19095477 -0.17085427 -0.15075377 -0.13065327 -0.11055276 -0.09045226\n", " -0.07035176 -0.05025126 -0.03015075 -0.01005025 0.01005025 0.03015075\n", " 0.05025126 0.07035176 0.09045226 0.11055276 0.13065327 0.15075377\n", " 0.17085427 0.19095477 0.21105528 0.23115578 0.25125628 0.27135678\n", " 0.29145729 0.31155779 0.33165829 0.35175879 0.3718593 0.3919598\n", " 0.4120603 0.4321608 0.45226131 0.47236181 0.49246231 0.51256281\n", " 0.53266332 0.55276382 0.57286432 0.59296482 0.61306533 0.63316583\n", " 0.65326633 0.67336683 0.69346734 0.71356784 0.73366834 0.75376884\n", " 0.77386935 0.79396985 0.81407035 0.83417085 0.85427136 0.87437186\n", " 0.89447236 0.91457286 0.93467337 0.95477387 0.97487437 0.99497487\n", " 1.01507538 1.03517588 1.05527638 1.07537688 1.09547739 1.11557789\n", " 1.13567839 1.15577889 1.1758794 1.1959799 1.2160804 1.2361809\n", " 1.25628141 1.27638191 1.29648241 1.31658291 1.33668342 1.35678392\n", " 1.37688442 1.39698492 1.41708543 1.43718593 1.45728643 1.47738693\n", " 1.49748744 1.51758794 1.53768844 1.55778894 1.57788945 1.59798995\n", " 1.61809045 1.63819095 1.65829146 1.67839196 1.69849246 1.71859296\n", " 1.73869347 1.75879397 1.77889447 1.79899497 1.81909548 1.83919598\n", " 1.85929648 1.87939698 1.89949749 1.91959799 1.93969849 1.95979899\n", " 1.9798995 2. ]\n" ] } ], "source": [ "print(x)" ] }, { "cell_type": "markdown", "id": "2b32245f-d3ce-4029-aa80-b9c101ca6c5b", "metadata": {}, "source": [ "Now that we have the list, let's do something cool with it like make a plot." ] }, { "cell_type": "code", "execution_count": 22, "id": "5a5854ba-8ab1-4eaa-bfa4-6edb90434b22", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, '$y = x^2$')" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x,x**2, color=\"red\")\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.title(\"$y = x^2$\", fontdict={'size':22})" ] }, { "cell_type": "markdown", "id": "c8147ffc-a749-472c-b652-7613795e8b72", "metadata": {}, "source": [ "The code in the box above creates a plot of x^2, labels the x and y axis, and gives the plot a title.
\n", "Feel free to play around with this. Change the plot color, the size of the title, etc." ] }, { "cell_type": "markdown", "id": "8e51f62e-29f4-484f-9839-fbe271185667", "metadata": {}, "source": [ "In the next cells, I create a new list and print the list for verification.
\n", "This should look familiar." ] }, { "cell_type": "code", "execution_count": 23, "id": "cb300c17-e088-4812-9eaf-1836e15a4ba5", "metadata": {}, "outputs": [], "source": [ "mylist = [91, 13, 5, 19, 9]" ] }, { "cell_type": "code", "execution_count": 24, "id": "a6cb54d9-7833-4859-a69b-dd59e50086e0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[91, 13, 5, 19, 9]\n" ] } ], "source": [ "print(mylist)" ] }, { "cell_type": "markdown", "id": "ccdd803a-f234-40d6-8306-1b6448d61162", "metadata": {}, "source": [ "Examine the following code. This is an example of a loop structure in python." ] }, { "cell_type": "code", "execution_count": 25, "id": "5184e1f5-bd6e-4677-81c3-ab2e5ba8107d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "91\n", "13\n", "5\n", "19\n", "9\n" ] } ], "source": [ "for item in mylist:\n", " print(item)\n" ] }, { "cell_type": "markdown", "id": "e8ef6df0-d09e-4349-a70d-091463973288", "metadata": {}, "source": [ "What this does is go through each element in the list mylist, place that element of the list into
\n", "the variable item and then prints the variable. Notice that each element in the list is printed separately.

\n", "We can take this another step with the following code. Look it over and make sure you understand it." ] }, { "cell_type": "code", "execution_count": 26, "id": "dc657c43-10ad-49e8-8637-278d63e1cd9a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "91 8281 753571\n", "13 169 2197\n", "5 25 125\n", "19 361 6859\n", "9 81 729\n" ] } ], "source": [ "for item in mylist:\n", " print(item, item**2, item**3)\n", " # I could also do more here. It doesn't need to be just one line." ] }, { "cell_type": "markdown", "id": "c5d78c47-0e8a-4eeb-8610-c6d7e47cc83a", "metadata": {}, "source": [ "Also note the use of an inline comment in python using the hashtag." ] }, { "cell_type": "markdown", "id": "692e8bdb-0291-413d-9b10-acf8ff5ea395", "metadata": {}, "source": [ "The following code uses the range function to create a list and prints out the items of the list.
\n", "Notice it only goes from 1 to 10.
" ] }, { "cell_type": "code", "execution_count": 27, "id": "ce27a047-0d8d-47b5-a52d-6ee9b9bbabd2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "2\n", "3\n", "4\n", "5\n", "6\n", "7\n", "8\n", "9\n", "10\n" ] } ], "source": [ "for i in range(1,11):\n", " print(i)" ] }, { "cell_type": "markdown", "id": "9c9ddf24-57d3-4731-98bc-9546bf85f28b", "metadata": {}, "source": [ "See if you understand the output from the following code." ] }, { "cell_type": "code", "execution_count": 28, "id": "df60ff19-3a80-4e8c-8a9e-fc0be07a73d8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "1\n" ] } ], "source": [ "for i in range(4,8,2):\n", " print(1)" ] }, { "cell_type": "markdown", "id": "f20b4faf-7da9-4c8b-8804-4713f6deafdd", "metadata": {}, "source": [ "Ok, I fooled you a bit there, but you should still understand the output.
\n", "The code below is what you were expecting and the output." ] }, { "cell_type": "code", "execution_count": 29, "id": "65dfa7b2-f4d6-4adc-848f-c8409836c165", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n", "6\n" ] } ], "source": [ "for i in range(4,8,2):\n", " print(i)" ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:prod] *", "language": "python", "name": "conda-env-prod-py" }, "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.11.10" } }, "nbformat": 4, "nbformat_minor": 5 }